1

私はすでにstackoverflowで同様の質問を検索しており、次のような他の回答からのいくつかの提案を使用して実装しようとしました:

Point p1 = prop.getDisplayPoint();
Point p2 = prop2.getDisplayPoint();

int xCenter = p1.x - 50;
int yCenter;

if(p1.y > p2.y)
        yCenter = p1.y - ((p1.y-p2.y)/2);
else
        yCenter = p2.y - ((p2.y-p1.y)/2);

int r = (int)Math.sqrt((p1.x-xCenter)*(p1.x-xCenter) + (p1.y-yCenter)*(p1.y-yCenter));
int x = xCenter-r;
int y = yCenter-r;
int width = 2*r;
int height = 2*r;
int startAngle = (int) ((180/Math.PI)*Math.atan2(p1.y-yCenter, p1.x-xCenter));
int endAngle = (int) ((180/Math.PI)*Math.atan2(p2.y-yCenter, p2.x-xCenter));
g.drawArc(x, y, width, height, startAngle, endAngle);

しかし、それでもこれは私を助けませんでした。2 つのポイントの中心を計算しようとしましたが、円弧の結果は期待したものではありませんでした。

これが結果でした:

ここに画像の説明を入力

これは私が探しているものです:

期待される結果

「車」のポイントと「バス」のポイントのように、接続したいポイントの各ペアの座標を持っているので、それらの間に円弧を描きたいと思います。角度は常にそのようなものになります。

4

1 に答える 1

4

写真を見ると、2 つの問題があるように見えます。

1 つ目は、原点が正しくないことです。特定の値を試したことはありませんが、最初の点に基づいて任意の中心を計算し、(実際のテキストの位置ではなく) その中心点に基づいて円弧の始点と終点を計算しているためだと思います。

しかし、より大きな問題は、アークがタスクにあまり適していないことだと思います。円弧を使用すると、半円 (または半楕円形)、または円の 1/3 を選択できますが、それらは見栄えがよくありません。それらは確かにあなたの望む例のようには見えません.

代わりに、「円弧」の側面を深めることができるように、 Bezier Curveが必要です。これは、 Java2Dのベジエ曲線関数のドキュメントを示す SO の質問です。「java draw bezier」をグーグルで検索すると、たくさんの例があります。

于 2013-03-27T18:19:28.640 に答える