私は既知の掃引角度で弧を描いた円グラフに取り組んでいます.今、各弧の中心にラベルを表示したい、または各弧の中心から線を引くと言います.
中心座標、開始座標、スイープ角度、半径がわかっているので、終了座標を計算したいと思います。
また、すべての座標に一致する三角形を描画し、距離式も使用してこれを試しましたが、Javaで方程式を解く方法がわかりません。
適切な解決策を教えてください。
ベクトルで作業します。A
を円の中心から弧の始点までのベクトルとします。これを計算する
A = start_point - centre
をスイープtheta
角度 (ラジアン単位) とします。回転行列を使用して、円弧の開始点を円の中心を中心に回転させます。http://en.wikipedia.org/wiki/Rotation_matrix
明示的に、
newpoint_x = cos(theta)*A_x + sin(theta)*A_y
newpoint_y = -sin(theta)*A_x + cos(theta)*A_y
ここA_x
で、 の x 成分A
(および についても同様A_y
) です。それで
newpoint = centre + (newpoint_x,newpoint_y)
欲しいポイントです。ポイントが間違った方向 (反時計回り) に回転しているように見える場合があります。
theta = -theta
代わりは。これはうまくいくはずです。
弧の中点を評価したい場合は、単に使用します
theta = theta / 2
StartAngle = atan2(StartY-CenterY, StartX - CenterX)
EndX = CenterX + Radius * Cos(StartAngle + SweepAngle)
EndY = CenterY + Radius * Sin(StartAngle + SweepAngle)
別の方法: の行列積を作る
shift by (Center - Start)
rotation by SweepAngle
back shift
この行列を開始点に適用します(行列とベクトルを掛けます)