我正在编写一个" Paint" Java中的应用程序,包括矩形节点和无向边。问题是边缘的起点位于边连接的矩形的中心,边的末端位于该边连接的另一个矩形的中心。
为了避免绘制矩形和边缘之间的交点,我首先绘制边缘,然后绘制节点,以便将它们放在边缘的顶部,从而隐藏交点。
当沿边缘放置另一个与该边缘不对应的节点时,会出现问题。在这种情况下,因为首先绘制边,所以节点出现在边的顶部。但是,这不是我想要的。我希望边缘显示在节点之上。
图片: how it is和how it should be
我能想到解决这个问题的最全面的方法是首先绘制节点,然后绘制边缘,避免边缘与它所连接的两个节点的交点。然而,这很难在纸上进行,因为我使用drawLine
绘制边缘,而且我无法检查交叉点。
这就是我首先绘制边缘的原因,但之后出现了我提到的问题。有什么想法吗?
答案 0 :(得分:0)
您需要的是问题#1的解决方案。你需要"移动"边缘的端点远离矩形的中心。这样你就不必最后绘制节点并自动解决你手头的问题。
我在步骤2中提出的解决方案仅在连接节点彼此左右相同时才有效,否则您需要稍微更高级的数学,我在步骤2.1中开始。
第1步:边缘不超过两个Point
s,其中Point
只是x
和y
值。通过比较每条边的x
找到边的左端和右端。为简单起见,我们将其另存为xLeft
,xRight
,yLeft
和yRight
。也许你还有别的东西,但是你明白了。
步骤2:将矩形宽度的xLeft
移动到右边,并从xRight
中减去矩形宽度的一半。
(可选)步骤2.1:如果两个连接节点在彼此之上,您可以使用Math.atan2(yRight-yLeft, xRight-xLeft)
来计算角度。如果值在较低的光谱中(在-3pi/4
和-pi/4
之间),则在相应的y值上加上和减去矩形高度的一半。如果你愿意的话,你可以通过这个来为所有4个方向创建数学和逻辑。
步骤3:绘制节点后绘制新边。边缘现在已连接"到矩形的边缘。
随意提问,但我建议您先尝试将其放入代码中。