REM Start of BASIC! Program FN.DEF ellipse(mx,my,px,py,qx,qy) !This draws an ellipse, !fitted into a parallelogram !calculated with !Rytz's construction. !turn p around m with 90 degrees !result is p2 l1=HYPOT(px-mx,py-my) w1=ATAN2(py-my,px-mx)+PI()/2 p2x=mx+COS(w1)*l1 p2y=my+SIN(w1)*l1 !Middle between p2 and q nx=(p2x+qx)/2 ny=(p2y+qy)/2 !radius r=HYPOT(nx-mx,ny-my) !Direction vector p2-q, rvnx=p2x-qx rvny=p2y-qy !normalized l3=HYPOT(rvnx,rvny) rvnx/=l3 rvny/=l3 !Point a ax=nx+rvnx*r ay=ny+rvny*r !Point b bx=nx-rvnx*r by=ny-rvny*r !Direction vector a-m, rvax=ax-mx rvay=ay-my !normalized l4=HYPOT(rvax,rvay) rvax/=l4 rvay/=l4 !Direction vector b-m, rvbx=bx-mx rvby=by-my !normalized l5=HYPOT(rvbx,rvby) rvbx/=l5 rvby/=l5 !Distance a-q r1=HYPOT(ax-qx,ay-qy) !Distance b-q r2=HYPOT(bx-qx,by-qy) w2=TODEGREES(ATAN2(rvay,rvax)) GR.ROTATE.START w2,mx,my GR.OVAL vd,mx-r2,my-r1,mx+r2,my+r1 GR.ROTATE.END FN.RTN go FN.END DIM px[4],py[4] GR.OPEN 255,0,0,0,0,1 GR.SCREEN sx,sy px[1]=sx/4*1 py[1]=sy/4*1-50 px[2]=sx/4*3 py[2]=sy/4*1+50 px[3]=sx/4*3 py[3]=sy/4*3+50 px[4]=sx/4*1 py[4]=sy/4*3-50 LIST.CREATE n,lp GR.COLOR 255,255,255,255 GR.TEXT.SIZE 30 GR.TEXT.ALIGN 2 GR.TEXT.DRAW vd,sx/2,sy/20,"move a corner with your finger" !prepare the parallelogram LIST.CLEAR lp FOR i=1 TO 4 LIST.ADD lp,px[i],py[i] NEXT i !draw the parallelogram GR.COLOR 255,255,255,255,0 GR.POLY vd,lp !show all GR.RENDER DO GR.TOUCH tt,tx,ty IF tt&!ott THEN !select the corner to move mi=sx*sy FOR i=1 TO 4 l=HYPOT(tx-px[i],ty-py[i]) IF l