Mathematica demos for teaching

by Oliver Knill

Interactive geometric object with points and lines

CircumscribedCircle=Manipulate[ (* Oliver Knill, Mathematica 7, 2008 *)
 Graphics[{
   {x1,y1}=p1; {x2,y2}=p2; {x3,y3}=p3;
   R=2*(x3*(y1-y2)+x1*(y2-y3)+x2*(-y1+y3));
   m1=(x3^2*(y1-y2)+(x1^2+(y1-y2)*(y1-y3))*(y2-y3)+x2^2*(-y1+y3))/R;
   m2=(-(x2^2*x3)+x1^2*(-x2+x3)+x3*(y1^2-y2^2)
      +x1*(x2^2-x3^2+y2^2-y3^2)+x2*(x3^2-y1^2+y3^2))/R;
   center={m1,m2}; radius=Sqrt[(center-p1).(center-p1)]; 
   {RGBColor[1,0,0],Dynamic[Disk[center,0.07]]},
   {RGBColor[0,0,1],Dynamic[{Disk[p1,0.1],Disk[p2,0.1],Disk[p3,0.1]}]},
   {RGBColor[1,0,0],Thickness[0.007],Dynamic[Circle[center,radius]]},
   {RGBColor[0,1,0],Thickness[0.004],Dynamic[Line[{p1,p2,p3,p1}]]},
   Locator[Dynamic[p1],ImageSize->40],
   Locator[Dynamic[p2],ImageSize->40],
   Locator[Dynamic[p3],ImageSize->40]},
   PlotRange->{{-2,2},{-2,2}},ImageSize->{600,600}],
   {{p1,{ 1.1,0.6}},{-1,-1},{1,1},ControlType->None},
   {{p2,{-0.9,0.5}},{-1,-1},{1,1},ControlType->None},
   {{p3,{-0.3,1.2}},{-1,-1},{1,1},ControlType->None}
]
By the way, here is the computation of the center of the circumscribed circle
p1={x1,y1}; p2={x2,y2}; p3={x3,y3}; perp[{a_,b_}]:={-b,a};
n2=p1-p2; n3=p1-p3; m2=(p1+p2)/2; m3=(p1+p3)/2; 
Solve[{n2.({x,y}-m2)==0, n3.({x,y}-m3)==0},{x,y}]  *)

2. Interactive example with dynamics

h[x_]:=If[Abs[x]<1,1,-1];
f[{{a_,b_},{v_,w_}}]:={{a+h[a] v,b+h[b] w},{h[a] v,(h[b]-0.0001)w-0.001}};
DynamicModule[{c={}}, r:=0.1*(Random[]-1/2);
  EventHandler[Graphics[{RGBColor[1,0,0],PointSize[0.05],
    Point[Dynamic[c=Map[f,c]; Map[First,c]]]},PlotRange ->{{-1,1},{-1,1}},
    Background -> RGBColor[0.9,0.9,1],ImageSize->500],
    "MouseDown" :> (AppendTo[c,{MousePosition["Graphics"],{r,r}}])]
]

3. Interacting with lines and showing text

Manipulate[ A={{a,b},{c,d}};
  Q1 = {0,0}; Q2 = Dynamic[A.{1,0}]; Q3 = {0,0}; Q4 = Dynamic[A.{0,1}];
  B0={RGBColor[0,1,0],PointSize[0.04], Dynamic[Point[Q1]]};
  B1={RGBColor[1,0,0],Thickness[0.02], Dynamic[Arrow[{Q1,Q2}]]};
  B2={RGBColor[0,0,1],Thickness[0.01], Dynamic[Arrow[{Q1,Q4}]]};
  B3={RGBColor[1,1,0],Dynamic[Polygon[{Q1,Q2,Q2+Q4,Q4}]]};
  B4 = Locator[Dynamic[{a,c}]];
  B5 = Locator[Dynamic[{b,d}]];
  B6 = Text[MatrixForm[Dynamic[Floor[10*{{a,b},{c,d}}]]],{1.5,1.5}]; 
  Graphics[{B6,B3,B2,B1,B0,B4,B5}, 
   PlotRange -> {{-2,2},{-2,2}},
   ImageSize -> {400,400}], 
   {{a,1},{-1,1},ControlType->None},
   {{b,0},{-1,1},ControlType->None},
   {{c,0},{-1,1},ControlType->None},
   {{d,1},{-1,1},ControlType->None}]