例如,如果我有一个具有这些属性的三角形
triangle(100, 300, 200, 200, 300, 300);
或者只是将其视为
triangle(x1, y1, x2, y2, x3, y3);
如何编写if语句来检查mousePressed()是否在三角形内?
答案 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);
}
但是,在实践中,您可能会发现使用数学方法更简单(因为需要担心的解决方法较少)。