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


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

结果是:



这是我在寻找的东西:



我具有要连接的每对点的坐标,例如“汽车”上的点和“公共汽车”上的点,然后我要在它们之间画一条弧。角度永远都是那样。

最佳答案

看图片,看来您有两个问题。

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

但是,我认为更大的问题是弧线实际上并不适合该任务。使用圆弧时,您可以选择半圆(或半椭圆)或大约1/3的圆,但是看起来不太好。它们肯定不会像您想要的示例。

相反,您需要一个Bezier Curve,以便可以加深“弧”的侧面。 Here's一个SO问题,可将您指向Java2D中贝塞尔曲线函数的文档。如果您通过Google搜索“ java draw bezier”,也有很多示例。

关于java - 使用两个点作为引用绘制圆弧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15664219/

10-16 01:11