gpt4 book ai didi

java - 以正确的顺序绘制事物,Java

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:37 25 4
gpt4 key购买 nike

我正在用 Java 编写一个由矩形节点和无向边组成的“Paint”应用程序。问题在于,边的起点位于该边所连接的矩形的中心,而该边的终点位于该边所连接的另一个矩形的中心。

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

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

图片: how it ishow it should be

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

这就是为什么我先画边,然后就出现了我提到的问题。有什么想法吗?

最佳答案

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

我在步骤 2 中提出的解决方案仅在连接节点彼此左侧和右侧的情况下才有效,否则您需要稍微更高级的数学,我在步骤 2.1 中开始了这一点。

第 1 步:边只不过是两个 ,其中 只是一个 xy 值。通过比较每条边的x来找到边的左端和右端。为了简单起见,我们将其保存为 xLeftxRightyLeftyRight。也许您对此还有其他想法,但您已经明白了。

第2步:将xLeft向右移动矩形宽度的一半,并用xRight减去矩形宽度的一半。

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

第三步:绘制完节点后绘制新的边。现在,边缘“连接”到矩形的边缘。

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

关于java - 以正确的顺序绘制事物,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com