gpt4 book ai didi

java - 室内空间如何利用?

转载 作者:行者123 更新时间:2023-12-02 08:46:37 24 4
gpt4 key购买 nike

我有一个关于正交多边形边缘的问题。我的目标是确定一条边是否是顶边(这意味着多边形的内部位于下方)、底边(这意味着多边形的内部位于上方)、右边(多边形的内部位于左侧)或左边缘(多边形的内部是右)。

我有多边形的坐标,并将它们逆时针排序(因为这是通常推荐的方式)。

我编写了一些代码来用 Java 计算多边形的内部。

[...]

   public static double polygonArea(double X[], double Y[], int n)
{
// Initialze area double area = 0.0; `
// Calculate value of shoelace formula
int j = n - 1;
for (int i = 0; i < n; i++)
{
area += (X[j] + X[i]) * (Y[j] - Y[i]);

// j is previous vertex to i
j = i;
}

// Return absolute value
return Math.abs(area / 2.0);
}

...什么运作良好。然而,我完全不知道如何使用它来计算或决定边缘(例如,由其顶点和底点定义的垂直边缘)是左边缘(内部是右)还是右边缘(内部是左)。

也许还有一种更简单的解决方案。但是,如果有人能给我一些建议来解决我的问题,我将不胜感激。

最佳答案

如果我正确理解了你的问题(图表会有所帮助),你可以通过比较每个边相对于简单(无自相交)的正交多边形的位置(顶部、底部、左、右) x(水平)或 y(垂直)坐标的排序。

显然,点的顺序很重要,因此对于逆时针多边形,您可以使用如下所示的内容:

enum EdgeType {TOP, BOTTOM, LEFT, RIGHT, EMPTY}

public EdgeType orthoEdgeTypeCCW(double x0, double y0, double x1, double y1)
{
if(x0 == x1) // vertical
{
return (y0 < y1) ? EdgeType.RIGHT :
(y0 > y1) ? EdgeType.LEFT :
EdgeType.EMPTY;
}
else if(y0 == y1) // horizontal
{
return (x0 < x1) ? EdgeType.BOTTOM :
(x0 > x1) ? EdgeType.TOP :
EdgeType.EMPTY;
}
else
{
throw new IllegalArgumentException("Edge not orthogonal");
}
}

关于java - 室内空间如何利用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61042026/

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