以正确的顺序绘制东西,Java

时间:2016-06-01 19:47:08

标签: java graph paintcomponent

我正在编写一个" Paint" Java中的应用程序,包括矩形节点和无向边。问题是边缘的起点位于边连接的矩形的中心,边的末端位于该边连接的另一个矩形的中心。

为了避免绘制矩形和边缘之间的交点,我首先绘制边缘,然后绘制节点,以便将它们放在边缘的顶部,从而隐藏交点。

当沿边缘放置另一个与该边缘不对应的节点时,会出现问题。在这种情况下,因为首先绘制边,所以节点出现在边的顶部。但是,这不是我想要的。我希望边缘显示在节点之上。

图片:  how it ishow it should be

我能想到解决这个问题的最全面的方法是首先绘制节点,然后绘制边缘,避免边缘与它所连接的两个节点的交点。然而,这很难在纸上进行,因为我使用drawLine绘制边缘,而且我无法检查交叉点。

这就是我首先绘制边缘的原因,但之后出现了我提到的问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要的是问题#1的解决方案。你需要"移动"边缘的端点远离矩形的中心。这样你就不必最后绘制节点并自动解决你手头的问题。

我在步骤2中提出的解决方案仅在连接节点彼此左右相同时才有效,否则您需要稍微更高级的数学,我在步骤2.1中开始。

第1步:边缘不超过两个Point s,其中Point只是xy值。通过比较每条边的x找到边的左端和右端。为简单起见,我们将其另存为xLeftxRightyLeftyRight。也许你还有别的东西,但是你明白了。

步骤2:将矩形宽度的xLeft移动到右边,并从xRight中减去矩形宽度的一半。

(可选)步骤2.1:如果两个连接节点在彼此之上,您可以使用Math.atan2(yRight-yLeft, xRight-xLeft)来计算角度。如果值在较低的光谱中(在-3pi/4-pi/4之间),则在相应的y值上加上和减去矩形高度的一半。如果你愿意的话,你可以通过这个来为所有4个方向创建数学和逻辑。

步骤3:绘制节点后绘制新边。边缘现在已连接"到矩形的边缘。

随意提问,但我建议您先尝试将其放入代码中。