fractalkitty looking for math? fractalkitty.com

100 days of code

desargues

#trig#animation#math#geometry

cPerspxcPerspymP1mP2mP3yP11yP12yP21yP22yPC1yPC2mAxisPplotPerspectivetriPlot

let cPerspx,cPerspy,mP1,mP2,mP3,yP11,yP12,yP21,yP22,yPC1,yPC2,mAxisP,t
function setup(){
  createCanvas(700,700);
  background(0,170,160);
}
function draw(){
  t=frameCount/100;
  background(0,170,160,15);
  translate(width/2,width/2);
  plotPerspective();
  triPlot()
  
}

function plotPerspective(){
  strokeWeight(2)
  cPerspx=200;
  cPerspy=-100;
  fill(200,250,255);
  circle(cPerspx,cPerspy,10);
  mP1=0.32+0.1*sin(t/2);
  mP2=-0.22-0.05*sin(t/2);
  yP11=mP1*(-width/2-cPerspx)+cPerspy;
  yP12=mP1*(width/2-cPerspx)+cPerspy;
  line(-width/2,yP11,width/2,yP12);
  yP21=mP2*(-width/2-cPerspx)+cPerspy;
  yP22=mP2*(width/2-cPerspx)+cPerspy;
  line(-width/2,yP21,width/2,yP22);
  strokeWeight(1)
  mP3=0.15*sin(t/5);
  yPC1=mP3*(-width/2-cPerspx)+cPerspy;
  yPC2=mP3*(width/2-cPerspx)+cPerspy;
  line(-width/2,yPC1,width/2,yPC2);
  
}

function triPlot(){
  stroke(0,80,125)
  Ax=-240-30*sin(t)*cos(t)-10*sin(t);
  Ay=mP1*(Ax-cPerspx)+cPerspy;
  circle(Ax,Ay,5);
  Bx=-100-10*cos(t/3)-10*sin(t/2);
  By=mP3*(Bx-cPerspx)+cPerspy;
  circle(Bx,By,5);
  Cx=-150-10*cos(t)-10*sin(t)*cos(t);
  Cy=mP2*(Cx-cPerspx)+cPerspy;
  circle(Cx,Cy,5);
  fill(209, 187, 250,120);
  triangle(Ax,Ay,Bx,By,Cx,Cy)
  mAC=(Ay-Cy)/(Ax-Cx);
  xAC1=(-height/2-Ay)/mAC+Ax;
  xAC2=(height/2-Ay)/mAC+Ax;
  line(xAC1,-height/2,xAC2,height/2);
  mAB=(Ay-By)/(Ax-Bx);
  xAB1=(-height/2-Ay)/mAB+Ax;
  xAB2=(height/2-Ay)/mAB+Ax;
  line(xAB1,-height/2,xAB2,height/2);
  mBC=(Cy-By)/(Cx-Bx);
  xBC1=(-height/2-By)/mBC+Bx;
  xBC2=(height/2-By)/mBC+Bx;
  line(xBC1,-height/2,xBC2,height/2);
  ax=20-10*cos(t/2)-20*sin(t/2);
  ay=mP1*(ax-cPerspx)+cPerspy;
  circle(ax,ay,5);
  bx=30-20*cos(t/4)*sin(t/2);
  by=mP3*(bx-cPerspx)+cPerspy;
  circle(bx,by,5);
  cx=-60-20*sin(t/3)*cos(t/2);
  cy=mP2*(cx-cPerspx)+cPerspy;
  circle(cx,cy,5);
  fill(255, 253, 128,150);
  triangle(ax,ay,bx,by,cx,cy)
  mac=(ay-cy)/(ax-cx);
  xac1=(-height/2-ay)/mac+ax;
  xac2=(height/2-ay)/mac+ax;
  line(xac1,-height/2,xac2,height/2);
  mab=(ay-by)/(ax-bx);
  xab1=(-height/2-ay)/mab+ax;
  xab2=(height/2-ay)/mab+ax;
  line(xab1,-height/2,xab2,height/2);
  mbc=(cy-by)/(cx-bx);
  xbc1=(-height/2-by)/mbc+bx;
  xbc2=(height/2-by)/mbc+bx;
  line(xbc1,-height/2,xbc2,height/2);
  fill(255)
  intACx=(mAC*Ax-Ay-mac*cx+cy)/(mAC-mac);
  intACy=mac*(intACx-ax)+ay;
  circle(intACx,intACy,7);
  intBCx=(mBC*Bx-By-mbc*bx+by)/(mBC-mbc);
  intBCy=mbc*(intBCx-bx)+by;
  circle(intBCx,intBCy,7);
  intABx=(mAB*Bx-By-mab*bx+by)/(mAB-mab);
  intABy=mab*(intABx-bx)+by;
  circle(intABx,intABy,7);
  mAxisP = (intACy-intBCy)/(intACx-intBCx);
  mAxisY1=mAxisP*(-width/2-intACx)+intACy;
  mAxisY2=mAxisP*(width/2-intACx)+intACy;
  strokeWeight(3)
  stroke(201, 108, 2)
  line(-width/2,mAxisY1,width/2,mAxisY2)
  stroke(0)  
}