desargues
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)
}