Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用室内空间?_Java - Fatal编程技术网

Java 如何使用室内空间?

Java 如何使用室内空间?,java,Java,我有一个关于正交多边形边的问题。 我的目标是确定边是顶边(这意味着多边形内部位于下方)、底边(这意味着多边形内部位于上方)、右边(多边形内部位于左侧)还是左边(多边形内部位于右侧) 我有多边形的坐标并按逆时针方向排序(因为这是通常推荐的方式) 我在Java中编写了一些代码来计算多边形的内部 [……] 公共静态双多边形区域(双X[],双Y[],整数n) { //初始化面积双面积=0.0` //鞋带公式计算值 int j=n-1; 对于(int i=0;i

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

我有多边形的坐标并按逆时针方向排序(因为这是通常推荐的方式)

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

[……]

公共静态双多边形区域(双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");
    }
}