处理3.0:检查是否已单击三角形

时间:2016-02-09 19:26:13

标签: processing

例如,如果我有一个具有这些属性的三角形

triangle(100, 300, 200, 200, 300, 300);

或者只是将其视为

triangle(x1, y1, x2, y2, x3, y3);

如何编写if语句来检查mousePressed()是否在三角形内?

1 个答案:

答案 0 :(得分:0)

正如凯文指出的那样,这是一个已经很好记录的问题和答案。

为了好玩,有一个hacky解决方法来避免使用PShape的数学运算。 有一个未记录的contains()函数,它检查x,y对是否在PShape的所有点内。这很好,因为这适用于所有其他形状,而不仅仅是三角形。它是多边形测试中的一个点,而不是三角形测试中的一个点。但是有一个问题。这个功能没有记录,因为它可能仍然是实验性的,所以有一些问题:

  • 仅适用于PATH类型PShapes
  • PATH类型未加载的PShapes(例如来自SVG文件)不使用shape()函数进行渲染,因此您必须手动循环顶点并绘制形状

以下是一个例子:

PShape triangle;

void setup(){
  size(100,100,P2D);
  noStroke();

  //create the triangle as PATH type PShape 
  triangle = new PShape(PShape.PATH);
  //add it's vertices
  triangle.vertex(50,10);
  triangle.vertex(10,90);
  triangle.vertex(90,90);

}
void draw(){
  background(255);
  //check if point is inside triangle
  if(triangle.contains(mouseX,mouseY)){
    fill(127);
  }else{
    fill(0);
  }
  //render triangle accessing the vertices previously set
  beginShape(TRIANGLE);
  for(int i = 0 ; i < triangle.getVertexCount(); i++){
    PVector v = triangle.getVertex(i);
    vertex(v.x,v.y);
  }
  endShape(CLOSE);
}

但是,在实践中,您可能会发现使用数学方法更简单(因为需要担心的解决方法较少)。