VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2007/07/10(Tue) 16:08
投稿者なな
Eメール
URL
タイトルRe^5: ラインを描き、重ならずに始点の横に文字を表示したい

こんにちは。
返信が遅くなりました。


> どの案で解決されたのでしょうか?
> それともみんなの案の折衷案?
@みなさんの案を少しずつに参考にさせていただいた
A元々あったソース(ローカルにあるソースです)を改造
Bかなり考えていたので自己解決

の@〜Bを折衷した感じだと思います。

ローカルのソースは、「使えない」と思っていましたが。
ヒントを読ませていただき、頭の中が整理できると、「使える」と思えるようになりました。
皆様にヒントをいただいたのに解決方法が説明不足になってしまい、申し訳ないです。

以下のソースで解決しました。
----------------------------------------
     '■線本体の描画角度を求める
    Dim radian_org As Double
    Dim angle_org As Double
    'x切片とy切片から度を求める
    If x2 - x1 = 0 Then
        '直線の時の考慮
        If y2 > y1 Then
            angle_org = 90
        Else
            angle_org = 270
        End If
    Else
        'ラジアン単位で本体の直線の傾きを求める
        radian_org = Math.Atn((y2 - y1) / (x2 - x1))
        'ラジアンから角度に変換する
        angle_org = radian_org * (180 / PI)
        If x1 > x2 Then
            angle_org = angle_org + 180
        End If
    End If
    
    '■文字開始位置は線の角度は求めた角度より180度とする
    Dim angle_a1 As Double
    Dim radian_a1 As Double
    Dim x_a1 As Single
    Dim y_a1 As Single
    '角度を+180度
    angle_a1 = angle_org + 180
    
    'ラジアン単位に変換
    radian_a1 = angle_a1 / (180 / PI)
    
    '「半径(100)の円+文字のサイズ」を考えてcos,sinで座標を求める
    If x1 < x2 Then
      x_a1 = Math.Cos(radian_a1) * (100 +フォント横幅)
    Else
       x_a1 = Math.Cos(radian_a1) * (100)
    End If
    
    If y1 < y2 Then
       y_a1 = Math.Sin(radian_a1) * (100 + フォント縦幅)
    Else
       y_a1 = Math.Sin(radian_a1) * (100)
    End If
----------------------------------------
ポイントは、
・文字開始位置は、線本体の角度より180度の位置にある。
・フォント横幅・任意の距離・Cosでを「x_a1」を求める。
・フォント縦幅・任意の距離・Sinでを「y_a1」を求める。
・固定で100をプラスしていた所に、それぞれx_a1・y_a1をプラスしてあげる。
だと思います。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -