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);

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

结果是这样的:

在此处输入图像描述

这就是我要找的:

预期结果

我有我想连接的每对点的坐标,比如“汽车”点和“公共汽车”点,然后我想在它们之间画一条弧线。角度永远是这样的。

4

1 回答 1

4

查看图片,您似乎有两个问题。

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

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

相反,您需要一个Bezier Curve,这样您就可以加深“弧”的两侧。这是一个 SO question,它将您指向 Java2D 中贝塞尔曲线函数的文档。如果你用谷歌搜索“java draw bezier”,还有很多例子。

于 2013-03-27T18:19:28.640 回答