gpt4 book ai didi

C点组成矩形

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:28 24 4
gpt4 key购买 nike

我有这段代码可以确定 4 个 x,y 坐标是否构成了一个工作得很好的矩形,但是,我需要这样做,以便它只有在以正确的顺序输入点时才有效,即:第 1 点:0 0第 2 点:20 0第三点:20 50第 4 点:0 50会说“是一个矩形”但是:第 1 点:0 0第 2 点:20 0第三点:0 50第 4 点:20 50会说“不是矩形”(因为点的顺序不正确)

这是我的:

 static bool IsRectangle(float x1, float y1, float x2, float y2,
float x3, float y3, float x4, float y4)
{
x2 -= x1; x3 -= x1; x4 -= x1; y2 -= y1; y3 -= y1; y4 -= y1;
return
(x2 + x3 == x4 && y2 + y3 == y4 && x2 * x3 == -y2 * y3) ||
(x2 + x4 == x3 && y2 + y4 == y3 && x2 * x4 == -y2 * y4) ||
(x3 + x4 == x2 && y3 + y4 == y2 && x3 * x4 == -y3 * y4);
}

我完全不确定如何限制它只以正确的顺序工作... :(谢谢

最佳答案

检查每对连续线段以确保它们垂直:(x1,y1) --> (x2,y2) 垂直于 (x2,y2) --> (x3,y3), (x2,y2) --> (x3,y3) 垂直于 (x3,y3) --> (x4,y4) 等,以 (x4,y4) 结尾 --> (x1,y1)。如果是,则您有一个矩形。

因此对于每个线段,您需要减去端点以获得该线​​段的 vector ...然后对于这些 vector 的每一对(连续)检查 X 分量的乘积与 Y 分量的乘积之和组件为零,表明它们是正交的。

例如:

static bool IsRectangle(float x1, float y1, float x2, float y2, 
float x3, float y3, float x4, float y4)
{
return !( ((x2-x1)*(x3-x2) + (y2-y1)*(y3-y2)) ||
((x3-x2)*(x4-x3) + (y3-y2)*(y4-y3)) ||
((x4-x3)*(x1-x4) + (y4-y3)*(y1-y4)) ||
((x1-x4)*(x2-x1) + (y1-y4)*(y2-y1)) );
}

不过,如果使用非常大的坐标或非整数坐标,可能需要调整上面的示例以允许舍入误差。

关于C点组成矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26702583/

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