Java 如何使用室内空间?
我有一个关于正交多边形边的问题。 我的目标是确定边是顶边(这意味着多边形内部位于下方)、底边(这意味着多边形内部位于上方)、右边(多边形内部位于左侧)还是左边(多边形内部位于右侧) 我有多边形的坐标并按逆时针方向排序(因为这是通常推荐的方式) 我在Java中编写了一些代码来计算多边形的内部 [……]Java 如何使用室内空间?,java,Java,我有一个关于正交多边形边的问题。 我的目标是确定边是顶边(这意味着多边形内部位于下方)、底边(这意味着多边形内部位于上方)、右边(多边形内部位于左侧)还是左边(多边形内部位于右侧) 我有多边形的坐标并按逆时针方向排序(因为这是通常推荐的方式) 我在Java中编写了一些代码来计算多边形的内部 [……] 公共静态双多边形区域(双X[],双Y[],整数n) { //初始化面积双面积=0.0` //鞋带公式计算值 int j=n-1; 对于(int i=0;i
公共静态双多边形区域(双X[],双Y[],整数n)
{
//初始化面积双面积=0.0`
//鞋带公式计算值
int j=n-1;
对于(int i=0;i
。。。什么是有效的。但是,我完全不知道如何使用它来计算或确定边(例如,由其顶部点和底部点定义的垂直边)是左边(内部为右)还是右边(内部为左)
也许还有一种更简单的解决方法。但是,如果有人能给我一些建议来解决我的问题,我将不胜感激。如果我正确理解了你的问题(图表会有所帮助),你可以通过比较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");
}
}
enum EdgeType{TOP,BOTTOM,LEFT,RIGHT,EMPTY}
公共边缘类型orthoEdgeTypeCCW(双x0、双y0、双x1、双y1)
{
如果(x0==x1)//垂直
{
返回(y0y1)?边缘类型左:
EdgeType.EMPTY;
}
else如果(y0==y1)//水平
{
返回(x0x1)?EdgeType.TOP:
EdgeType.EMPTY;
}
其他的
{
抛出新的IllegalArgumentException(“边不正交”);
}
}
您已按逆时针方向对点进行排序。如果您也按逆时针方向连接所有边,则每条边的内部都位于相对于边方向的左侧。我明白您的意思。但是,这并不能解决我的问题,因为我想将边更多地分类为“几何”这意味着我想把左边的边放在一个容器里,上面写着“左边的边”当你从上面看多边形时,里面会是所有的左边缘。我想对顶部、底部和右边缘做同样的处理。把它们放在容器中…希望这能澄清我想要达到的目的…如果我以逆时针的方式跟随点和边,确保所有东西都在左边,但是,我不知道无论我是在上、下、右还是左边缘!谢谢!这正是我所需要的!:)
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");
}
}