使用两个点作为参考绘制圆弧

时间:2013-03-27 16:33:32

标签: java graphics drawing label points

我已经在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);

但这仍然没有帮助我。 我试图计算我的两个点的中心,但弧的结果不是我在等待的。

这是结果:

enter image description here

这就是我要找的:

Expected result

我有想要连接的每对点的坐标,比如" car"以及" bus"然后我想在它们之间画一条弧。角度总是那样的。

1 个答案:

答案 0 :(得分:4)

看一下图片,看来你有两个问题。

首先是您的原点不正确。我没有尝试过特定的值,但我认为这是因为你根据第一个点计算任意中心,然后根据该中心点(而不是实际的文本位置)计算弧的起点和终点。

但是,我认为更大的问题是弧线并不适合这项任务。使用弧形,你可以选择半圆形(或半椭圆形),或者可能是圆形的1/3,但这些看起来不太好。它们肯定不会像你想要的那样。

相反,你想要一个Bezier Curve,这样你就可以加深“弧”的边。 Here's一个SO问题,指向Java2D中bezier曲线函数的文档。如果你谷歌“java draw bezier”,还有很多例子。