从平等输入获得不同的输出

时间:2016-02-18 22:49:09

标签: java processing

我正在使用Processing 3.0.1。我想检查两个2D段是否相互交叉。

每个点都是" float [2]"。该函数接收四个点(P1,P2,P3,P4)作为参数,并通过求解线P1P2,P3P4的参数方程来检查它。

一方面,我宣布了四点:

float p1[] = new float[2];
p1[0] = 200.0;
p1[1] = 200.0;
float p2[] = new float[2];
p1[0] = 200.0;
p1[1] = 100.0;
float p3[] = new float[2];
p1[0] = 150.0;
p1[1] = 150.0;
float p4[] = new float[2];
p1[0] = 200.0;
p1[1] = 300.0;
System.out.println(cross(p1, p2, p3, p4));

打印" false"。

另一方面,我创建了一个点数组并初始化它们。

float trian[][] = new float[3][2];
trian[0][0] = 150.0; 
trian[0][1] = 150.0;
trian[1][0] = 200.0; 
trian[1][1] = 300.0;
trian[2][0] = 300.0; 
trian[2][1] = 200.0;
float squar[][] = new float[4][2];
squar[0][0] = 100.0; 
squar[0][1] = 100.0;
squar[1][0] = 100.0; 
squar[1][1] = 200.0;
squar[2][0] = 200.0; 
squar[2][1] = 200.0;
squar[3][0] = 200.0; 
squar[3][1] = 100.0;
System.out.println(cross(squar[2], squar[3], trian[0], trian[1]));

打印" true"。

为什么我会得到不同的结果?我把这个函数计算在这里(我已经重新检查了两次,这是正确的)

// Returns whether segments P1P2 and P3P4 cross or not
boolean cross(float p1[], float p2[], float p3[], float p4[]) {
    float x1 = p1[0];
    float y1 = p1[1];
    float x2 = p2[0];
    float y2 = p2[1];
    float x3 = p3[0];
    float y3 = p3[1];
    float x4 = p4[0];
    float y4 = p4[1];

    float den = (x2 - x1)*(y4 - y3) - (y2 - y1)*(x4 - x3);

    if (den == 0)
        return false;

    float num = (x2 - x1)*(y1 - y3) + (y2 - y1)*(x3 - x1);

    float k = num/den;

    if ((k >= 0) && (k <= 1))
        return true;

    return false;
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来您已经解决了问题,但将来,使用PVector而不是带有2个索引的数组来跟踪您的观点可能会有所帮助:

PVector p1 = new PVector(200, 200);
PVector p2 = new PVector(200, 100);
PVector p3 = new PVector(150, 150);

然后,您可以创建一个跟踪点数的Shape类:

class Shape{
   ArrayList<PVector> points = new ArrayList<PVector>();

   public void addPoint(PVector p){
      points.add(p);
   }

   public void draw(){
      //draw the points
   }
}

然后使用Shape类:

Shape triangle = new Shape();
triangle.addPoint(p1);
triangle.addPoint(p2);
triangle.addPoint(p3);

这将比使用数组更好地帮助您组织和封装数据。这是物体被发明的东西,它们会让你的生活变得更加容易。