Processing 在beginShape/顶点中检测相交线的方法?

Processing 在beginShape/顶点中检测相交线的方法?,processing,Processing,我有这个非常基本的代码。我正在尝试使用beginShape()生成随机形状 我已经把我画布上的联合军械绘制成一个阵列。顶点()点然后从该数组中选择一个随机点来生成形状 到目前为止,我只使用了4个顶点 问题是:顶点线彼此交叉,看起来不自然。如果一个协和比另一个小,线相交-不是我想要的 我需要像 if(随机点一条线与随机点三条线相交){ 改变随机点一的方向 } 问题:如何检测线是否相交,然后避免发生这种情况 仍在学习代码。谢谢 PVector pt1 = new PVector(0, 0); //

我有这个非常基本的代码。我正在尝试使用beginShape()生成随机形状

我已经把我画布上的联合军械绘制成一个阵列。顶点()点然后从该数组中选择一个随机点来生成形状

到目前为止,我只使用了4个顶点

问题是:顶点线彼此交叉,看起来不自然。如果一个协和比另一个小,线相交-不是我想要的

我需要像

if(随机点一条线与随机点三条线相交){ 改变随机点一的方向 }

问题:如何检测线是否相交,然后避免发生这种情况

仍在学习代码。谢谢

PVector pt1 = new PVector(0, 0); // Top Left
PVector pt2 = new PVector(160, 0); //Top middle
PVector pt3 = new PVector(320, 0); // Top Right
PVector pt4 = new PVector(480, 0); // middle right
PVector pt5 = new PVector(640, 0); // middle right

PVector pt6 = new PVector(0, 160); // Middle Cent
PVector pt7 = new PVector(160, 160); // Middle Left
PVector pt8 = new PVector(320, 160); // bottom right
PVector pt9 = new PVector(480, 160); // bottom Cent
PVector pt10 = new PVector(640, 160); // bottom Cent

PVector pt11 = new PVector(0, 320); // Middle Cent
PVector pt12 = new PVector(160, 320); // Middle Left
PVector pt13 = new PVector(320, 320); // bottom right
PVector pt14 = new PVector(480, 320); // bottom Cent
PVector pt15 = new PVector(640, 320); // bottom Cent 

PVector pt16 = new PVector (0, 480); // bottom Left
PVector pt17 = new PVector(160, 480); // Top Left
PVector pt18 = new PVector (320, 480); //Top middle
PVector pt19 = new PVector(480, 480); // Top Right
PVector pt20 = new  PVector(640, 480); // bottom Cent

int [] pvPoint  = new int [11];

void setup() {
  size(640, 640, P3D);
  background(10);
  smooth();
  frameRate(2);

}

void draw() {
  background(10);
 //textVis();
 rect1();
}
void rect1() {

  int r1 = int  ( random (0,9) );

  int r2 = int  ( random (0,9) );

  int r3 = int  ( random (0,9) );

  int r4 = int  ( random (0,9) );

  pvPoint[0] = 0;
  pvPoint[1] = 160;
  pvPoint[2] = 160/2;
  pvPoint[3] = 320;
  pvPoint[4] = 320/2;
  pvPoint[5] = 480;
  pvPoint[6] = 480/2;
  pvPoint[7] = 640;
  pvPoint[8] = 640/2;
  int randOne =  pvPoint[r1];
  int randTwo =  pvPoint[r2];
  int randThree = pvPoint[r3];
  int randFour =  pvPoint[r4];


  stroke(#72DF2F); 
  strokeWeight(3.5);

  beginShape();

    fill(#72DF2F);
    vertex( randOne, pt1.x ); //pt1

    fill(#E54B98);
    vertex( randTwo, pt5.y );// pt5

    fill(#43B3E5);
    vertex( randThree, pt20.y+160 );// pt20

    fill(#D9CE4A);
    vertex( randFour, pt16.y+160 );// pt16

  endShape(CLOSE);

  stroke(#8C0012);
    ellipse( randOne, pt1.y, 7, 7 ); //pt1
    stroke(#018C1E);
    ellipse( randTwo, pt5.y, 7, 7 );// pt5
    stroke(#D2D930);
    ellipse( randThree, pt20.y+160, 7, 7 );// pt20
    stroke(#0C208C);
    ellipse( randFour, pt16.y+160, 7, 7 );// pt16
}

嗯。。。另一种方法呢?只是一个草稿,可以很容易地适应任何数量的顶点。。。 我使用trig以正确的顺序获取值:)

void setup(){
尺寸(400400);
帧率(4);
}
作废提款(){
makeShape();
}
void makeShape(){
浮子a、b、c、d;
a=随机(0,PI/2);
b=随机(PI/2,PI);
c=随机(PI,PI*1.5);
d=随机(PI*1.5,PI*2);
浮动magA=随机(15,50);
浮动磁极=随机(15,50);
float magC=随机(15,50);
浮动磁阻=随机(15,50);
PVector[]vtx=新的PVector[4];
vtx[0]=新的PVector(cos(a)*magA,sin(a)*magA);
vtx[1]=新PVector(cos(b)*magB,sin(b)*magB);
vtx[2]=新PVector(cos(c)*magC,sin(c)*magC);
vtx[3]=新PVector(cos(d)*magD,sin(d)*magD);
平移(随机(宽度)、随机(高度));
beginShape();
顶点(vtx[0].x,vtx[0].y);
顶点(vtx[1].x,vtx[1].y);
顶点(vtx[2].x,vtx[2].y);
顶点(vtx[3].x,vtx[3].y);
端形(闭合);
}
这里的版本采用两个参数:顶点数和每个多边形的最大大小:

void setup(){
大小(800800);
帧率(4);
}
作废提款(){
填充((帧数*2)%255);
内侧面=2+帧数/5;
//makeSides(整数边,整数最大值);
制作形状(侧面,100);
println(边+边);
}
空心形状(int边,int最大尺寸){
侧面=侧面>=2?侧面:2;
浮子a、b、c、d;
浮动片=两个_PI/(浮动)边;
浮动[]角度=新浮动[侧面];
对于(int i=0;i
我讨厌做那种人。。。但是这和OpenGL有什么关系呢?你把问题标错了吗?对不起,那是个错误。远离的