投稿日 | : 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をプラスしてあげる。
だと思います。