\mnb150ÿ{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fswiss\fprq2 Trebuchet MS;}{\f4\fmodern\fprq1 Lucida Sans Typewriter;}} {\colortbl\red0\green0\blue0;\red255\green0\blue0;} \deflang1033\pard\ri4\plain\f3\fs72\cf0 Chapter 2 Mathematical graphics with MuPAD\plain\f3\fs36\cf0 \par \par 2.1 Secrets of the Virtual Camera \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}f := (x,y) -> x^2 + y^2: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 g := (x,y) -> -x^2 + y^2: \par h := (x,y) -> x^2 - y^2: \par p := (x,y) -> -x^2 - y^2: \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}plotfunc3d( \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 f(x,y), g(x,y), h(x,y), p(x,y), \par x=-2..2, y=-2..2 \par ) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.1 \par >>>>>>>>>> Time for Exercise 2.2 \par \par 2.2 The structure of MuPAD graphs \par \par 2.3 The gallery of mathematical plots \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}info(plot) \par \pard\ri4\plain\f4\fs36\cf1 \par \plain\f3\fs36\cf0 2.3.1 Function2d \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}G1 := plot::Function2d(sin(x), x=-5..5) \par {\pntext\f1\'b7\tab}G1 := plot::Function2d(sin(x), x=-5..5, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 LineColor=RGB::Blue, \par LineWidth=0.3*unit::mm \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}G2 := plot::Function2d(sin(2*x), x=-5..5, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 LineColor=RGB::Red, \par LineWidth=0.6*unit::mm \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}G3 := plot::Function2d(sin(3*x), x=-5..5, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 LineColor=RGB::Brown, \par LineWidth=0.8*unit::mm \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}G4 := plot::Function2d(sin(4*x), x=-5..5, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 LineColor=[0.5, 0.5, 0.5], \par LineWidth=1*unit::mm \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} plot(G1,G2,G3,G4) // here we plot objects G1,..,G4 \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.3 \par \par 2.3.2 Curve2d \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}C1 := plot::Curve2d( \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 [2*sin(3*t), 4*cos(5*t)], t=0..2*PI \par ): \par \pard\ri4\plain\f4\fs36\cf1 >\plain\f3\fs36\cf0 >>>>>>>>> Time for Exercise 2.4 \par \par 2.3.3 Polar coordinates \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}P1 := plot::Polar([1, alpha], alpha=0..2*PI, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 LineWidth=0.3 \par ): \par P2 := plot::Polar( \par [sin(2*alpha), alpha], alpha=0..2*PI, \par LineWidth=0.5 \par ): \par P3 := plot::Polar([exp(-1/u),u], u=0.1..4*PI, \par LineWidth=1 \par ): \par plot(P1, P2, P3, Scaling=Constrained) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.5 \par \par 2.3.4 Implicit2d \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}I1 := plot::Implicit2d(x^2+y^2=1, x=-2..2, y=-2..2, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 LineColor=RGB::Red \par ): \par I2 := plot::Implicit2d(x^2-y^2=1, x=-2..2,y=-2..2, \par LineColor=RGB::Blue, \par LineWidth=0.5 \par ): \par I3 := plot::Implicit2d(x^4+y^4=1, x=-1..1, y=-1..1, \par LineColor=RGB::Green, \par LineWidth=0.7 \par ): \par I4 := plot::Implicit2d(-x^2+y^2=1, x=-2..2,y=-2..2, \par LineColor=RGB::Brown, \par LineWidth=0.9 \par ): \par plot(I1, I2, I3, I4, Scaling=Constrained) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.6 \par \par 2.3.5 Function3d \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}K := (x,y,z)->[abs(sin(x)), abs(sin(y)), abs(sin(z))]: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 F1 := plot::Function3d( \par 1.7*x*exp(-1/2*(x^2+y^2)), \par x=-4..4, y=-4..4, \par FillColorFunction=K \par ): \par F2 := plot::Function3d(-1, x=-4..4, y=-4..4): \par plot(F1, F2) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}K := (x,y,z)-> [abs(sin(x)),abs(sin(y)),abs(sin(z)),abs(sin(z))]: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 F1 := plot::Function3d( \par 1.7*x*exp(-1/2*(x^2+y^2)), \par x=-4..4, y=-4..4, \par XMesh=50, \par YMesh=50, \par FillColorFunction=K \par ): \par F2 := plot::Function3d(-1, x=-4..4, y=-4..4): \par plot(F1, F2) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.7 \par \par 2.3.6 Surfaces \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Cl := (u,v)->[u-trunc(u), v-trunc(v), 0]: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 S1 := plot::Surface( \par [sin(u)*sin(v), \par sin(u)*cos(v), \par cos(u)*sin(v)], \par u=0..PI, v=0..PI, \par FillColorFunction=Cl \par ): \par plot(S1) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.8 \par \par 2.3.7 Implicit3d \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Steiner := plot::Implicit3d( \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 y^2*z^2 + z^2*x^2 + x^2*y^2 + 2*x*y*z = 0, \par x=-1..1, y=-1..1, z=-1..1, \par MeshVisible=TRUE, \par XMesh=25, YMesh=25, ZMesh=25 \par ): \par plot(Steiner, Axes=None, Scaling=Constrained) \par \pard\ri4\plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Cl := (u,v,x,y,z)->[abs(x),abs(y),abs(z)]: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 SteinerParam:=plot::Surface( \par [sin(2*u)*(cos(v))^2, \par sin(u)*sin(2*v), \par cos(u)*sin(2*v)], \par u=-PI/2..PI/2, \par v=-PI/2..PI/2, \par FillColorFunction=Cl, \par Scaling=Constrained, \par UMesh=50, \par VMesh=50 \par ): \par plot(SteinerParam, Axes=None) \par \pard\ri4\plain\f4\fs36\cf1 \par \plain\f3\fs36\cf0 \par 2.3.8 Spherical coordinates \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}p := x -> abs(5*x - trunc(5*x)): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 Cl := (u,v,x,y,z)->[p(x*y),p(y*z),p(z*x)]: \par Shell := plot::Spherical( \par [u*v,u,v],u=0..2*PI,v=0..PI, \par FillColorFunction=Cl \par ): \par plot( \par Shell, \par Axes=Origin, \par AxesLineWidth=0.7, \par AxesTips=TRUE \par ) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.8 \par \par 2.3.9 Cylindrical coordinates \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Cl2 := (t,z)->[abs(1-z/PI),abs(1-t/PI),abs(t/PI)]: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 Cy1 := plot::Cylindrical( \par [3*sin(2*z)+2*cos(3*t), t, z], \par t=0..PI, z=0..PI, \par Scaling=Unconstrained, \par FillColorFunction=Cl2 \par ): \par plot(Cy1) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Cl2:= (u,z) -> [abs(1-z/PI) ,abs(1-u/PI),abs(u/PI)]: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 Hat := plot::Cylindrical( \par [t*v, sin(t), sin(v)], \par t=-2*PI..2*PI, v=0..2*PI, \par Scaling=Unconstrained, \par FillColorFunction=Cl2, \par UMesh=50, \par VMesh=50 \par ): \par plot(Hat) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.9 \par \par 2.3.10 Curve3d and Tube \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}a := 7: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 b := 3.5: \par r := 5: \par x := t -> r*sin(a*t)*cos(b*t): \par y := t -> r*sin(a*t)*sin(b*t): \par z := t -> r*cos(a*t): \par C3D := plot::Curve3d([x(t),y(t),z(t)], t=0..2*PI/b, \par LineWidth=0.8, \par LineColorType=Dichromatic \par ): \par plot(C3D) \par \pard\ri4\plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}a := 7: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 b := 3.5: \par r := 5: \par x := t -> r*sin(a*t)*cos(b*t): \par y := t -> r*sin(a*t)*sin(b*t): \par z := t -> r*cos(a*t): \par T3D := plot::Tube([x(t),y(t),z(t)], 0.2, t=0..2*PI/b): \par plot(T3D, Scaling=Unconstrained) \par \pard\ri4\plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}a := 7: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 b := 3.5: \par r := 5: \par x := t -> r*sin(a*t)*cos(b*t): \par y := t -> r*sin(a*t)*sin(b*t): \par z := t -> r*cos(a*t): \par T3D := plot::Tube( \par [x(t),y(t),z(t)], sin(t*b)/2, t=0..2*PI/b \par ): \par plot(T3D, Scaling=Unconstrained) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.10 \par \par 2.4 Plotting geometry models \par \par 2.4.1 Points, lines and polygons \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// point coordinates \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 x1 := -1: x2 := 1: x3 := 0: \par y1 := -1: y2 := -1: y3 := 1: \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} // declarations of 2D points \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 point1 := plot::Point2d([x1,y1]): \par point2 := plot::Point2d([x2,y2]): \par point3 := plot::Point2d([x3,y3]): \par points := plot::Group2d( \par point1, point2, point3, \par PointColor=[0,0.5,1], \par PointSize = 3*unit::mm \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// sides of the triangle \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 side1 := plot::Line2d([x1,y1],[x2,y2]): \par side2 := plot::Line2d([x2,y2],[x3,y3]): \par side3 := plot::Line2d([x3,y3],[x1,y1]): \par sides := plot::Group2d( \par side1, side2, side3, LineWidth=1 \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// midpoints of sides \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 midpoint1 := plot::Point2d([(x1+x2)/2,(y1+y2)/2]): \par midpoint2 := plot::Point2d([(x2+x3)/2,(y2+y3)/2]): \par midpoint3 := plot::Point2d([(x1+x3)/2,(y1+y3)/2]): \par midpoints := plot::Group2d( \par midpoint1, midpoint2, midpoint3, \par PointColor=[1,0.5,0], \par PointSize = 3*unit::mm \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// medians \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 median1 := plot::Line2d([x1,y1],[(x2+x3)/2,(y2+y3)/2]): \par median2 := plot::Line2d([x2,y2],[(x1+x3)/2,(y1+y3)/2]): \par median3 := plot::Line2d([x3,y3],[(x1+x2)/2,(y1+y2)/2]): \par medians := plot::Group2d( \par median1, median2, median3, \par LineColor=[0.8,0,0], \par LineWidth=0.5 \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}plot(sides, medians, midpoints,points, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 Scaling=Constrained, \par Axes=None \par ) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par >>>>>>>>>> Technical comment: \par As we have already mentioned, MuPAD graphics is based on OpenGL. \par Therefore most of OpenGL limitations have some impact on our constructions. \par One of them is that in 3D we cannot use filled polygons with more than three \par vertices. Therefore, in most of 3D constructions any filled flat polygon with \par more than three vertices should be developed as a collection of filled triangles. \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// point coordinates \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 x1 := -1: x2 := 1: x3 := 0: \par y1 := -1: y2 := -1: y3 := 1: \par zd := -1: zg := 1: \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} // bases declaration \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 top := plot::Polygon3d( \par [[x1,y1,zg], [x2,y2,zg],[x3,y3,zg]], \par Closed=TRUE, \par Filled=TRUE \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}bottom := plot::Polygon3d( \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 [[x1,y1,zd], [x2,y2,zd],[x3,y3,zd]], \par Closed=TRUE, \par Filled=TRUE \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} // one side declaration \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 tr1 := plot::Polygon3d( \par [[x1,y1,zd], [x2,y2,zd],[x2,y2,zg]], \par Closed=TRUE, \par Filled=TRUE, \par LinesVisible=FALSE \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}tr2 := plot::Polygon3d( \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 [[x1,y1,zg], [x2,y2,zg],[x1,y1,zd]], \par Closed=TRUE, \par Filled=TRUE, \par LinesVisible=FALSE \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} // solid declaration \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 prism := plot::Group3d(top, bottom, tr1, tr2): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} // final plot \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 plot( prism) \par \pard\ri4\plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// here we declare our sequence \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 data := [[n,1/(-2)^n] $ n=20..30]: \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} // now we declare plot object for the sequence \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 sequence := plot::PointList2d(data, \par PointSize=2*unit::mm, \par PointColor=RGB::Red \par ): \par plot(sequence) \par \pard\ri4\plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}sequence2 := plot::Polygon2d(data, \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 PointSize=2, \par PointsVisible=TRUE \par ): \par plot(sequence2) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.11 \par \par 2.4.2 Solids in MuPAD \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// declarations of four solids \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 RedSphere := plot::Sphere(1,[0,0,0], \par FillColor=[1,0,0] \par ): \par GreenCylinder := plot::Cylinder(1,[0,0,0],[0,1,1], \par FillColor=[0,0.5,0] \par ): \par PinkBox := plot::Box([0,0,0], [1,1,1], \par FillColor=[0.6, 0,0.6] \par ): \par BlueCone := plot::Cone(1,[0,0,0], 0.2,[1,1,1]): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}plot(RedSphere, GreenCylinder, BlueCone, PinkBox) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// transformations \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 A:=plot::Translate3d([1,1,1], \par plot::Scale3d([0.5,0.5,1],RedSphere) \par ): \par B:=plot::Translate3d([-1,1,0], \par plot::Scale3d([0.5,1,1],GreenCylinder) \par ): \par C:=plot::Translate3d([-1,-1,-1],PinkBox): \par S:=plot::Translate3d([1,-1,0],BlueCone): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab} // finally we plot translated solids \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 plot(A,B,C,S) \par \pard\ri4\plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Cube := plot::Box([0,0,0],[4,4,4], \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 FillColor=[0.7,0.7,1,0.6] \par ): \par He := plot::Hexahedron ( \par Center = [2.9,2.9,2.9], \par Radius = 1 \par ): \par Te := plot::Tetrahedron ( \par Center = [1,1,3], \par Radius = 1 \par ): \par Oc := plot::Octahedron ( \par Center = [1,1,1], \par Radius = 1 \par ): \par Ic := plot::Icosahedron ( \par Center = [1, 3, 1], \par Radius = 1 \par ): \par Do := plot::Dodecahedron( \par Center = [3, 1, 1], \par Radius = 1 \par ): \par Cam := plot::Camera( \par [28,-23,20],[1.5,1.5,1.5], PI/18 \par ): \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}plot(Cube, He, Te, Oc, Ic, Do, Cam, Axes=None) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.12 \par \par 2.5 Turtle graphics and L-systems \par \par 2.5.1 A brief introduction to turtle graphics \par \par Method 1\tab \tab Method2 \tab what hat it does \par Left(angle)\tab \tab \tab left(angle)\tab \tab \tab turn left (angle in radians) \par Right(angle)\tab \tab \tab right(angle)\tab \tab \tab turn right (angle in radians) \par Forward(dist)\tab \tab forward(dist)\tab \tab \tab draw a line given length dist \par Up\tab \tab \tab \tab \tab penUp()\tab \tab \tab \tab pen up and stop drawing \par Down\tab \tab \tab \tab penDown()\tab \tab \tab pen down and start drawing \par Push\tab \tab \tab \tab push()\tab \tab \tab \tab save the current position \par Pop\tab \tab \tab \tab \tab pop()\tab \tab \tab \tab go back to last saved position \par LineColor(color)\tab \tab setLineColor(color)\tab change the color of the pen \par \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}T:=plot::Turtle(): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 T::forward(100): T::right(PI/2): \par T::forward(100): T::right(PI/2): \par T::forward(50): T::right(PI/2): \par T::forward(50): T::right(PI/2): \par T::forward(100): T::right(PI/2): \par T::forward(25): T::right(PI/2): \par T::forward(25): T::right(PI/2): \par T::forward(50): \par plot(T) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par Technical comment: \par ================= \par Turtle graphics does not use coordinates explicitly. However, we can \par trace any location of the turtle by knowing that a new turtle always \par starts from the center of coordinate system and it is facing towards \par the positive direction of the y-axis. \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}T2 := plot::Rotate2d(PI/2,[0,0],T): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 T3 := plot::Rotate2d(PI,[0,0],T): \par T4 := plot::Rotate2d(3*PI/2,[0,0],T): \par plot(T,T2,T3,T4) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}A1 := plot::Translate2d([50,-75], T): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 A2 := plot::Rotate2d( PI/4,[0,0],A1): \par A3 := plot::Rotate2d(2*PI/4,[0,0],A1): \par A4 := plot::Rotate2d(3*PI/4,[0,0],A1): \par A5 := plot::Rotate2d(4*PI/4,[0,0],A1): \par A6 := plot::Rotate2d(5*PI/4,[0,0],A1): \par A7 := plot::Rotate2d(6*PI/4,[0,0],A1): \par A8 := plot::Rotate2d(7*PI/4,[0,0],A1): \par plot(A1,A2,A3,A4,A5,A6,A7,A8, \par LineColor=RGB::Red, \par LineWidth=0.5 \par ) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}A1 := plot::modify(T, LineColor=RGB::Red): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 A1 := plot::Translate2d([50,-75], A1): \par A3 := plot::modify(T, LineColor=RGB::Blue, LineWidth=2): \par A3 := plot::Translate2d([50,-75], A3): \par A3 := plot::Rotate2d(2*PI/4,[0,0],A3): \par A5 := plot::modify(T, \par LineColor=RGB::Green, \par LineStyle=Dashed, \par LineWidth=0.5 \par ): \par A5 := plot::Translate2d([50,-75], A5): \par A5 := plot::Rotate2d(4*PI/4,[0,0],A5): \par A7 := plot::modify(T, LineColor=RGB::Brown): \par A7 := plot::Translate2d([50,-75], A7): \par A7 := plot::Rotate2d(6*PI/4,[0,0],A7): \par plot(A1,A3,A5,A7, LineWidth=0.75) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par Method 1 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}A := plot::Turtle( \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 Forward(1), Right(PI/2), Forward(1) \par ): \par plot(A) \par \pard\ri4\plain\f4\fs36\cf0 \par M\plain\f3\fs36\cf0 ethod 2 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}A := plot::Turtle(): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 A::forward(1): A::right(PI/2): A::forward(1): \par plot(A) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.13 \par \par 2.5.2 Lindenmayer systems \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}KochCurve := plot::Lsys( // start a new L-system \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 PI/3, // turtle must always turn PI/3 \par "F++F++F", // this is the seed \par "F"="F-F++F-F", // iteration rule \par Generations=4 // number of generations \par ): \par plot(KochCurve) // now plot the turtle path \par \pard\ri4\plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Koch1 := plot::Lsys(PI/2, "F-F-F-F", \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 "F"="FF-F--F-F", \par Generations=4 \par ): \par plot(Koch1) \par \pard\ri4\plain\f4\fs36\cf1 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Koch2 := plot::Lsys(PI/2, "F+F+F+F", \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 "F"="FF-F-F+F+FF", \par Generations=4 \par ): \par plot(Koch2) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}weed := plot::Lsys(PI/5, "F", \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 "F"="BR[+FHF][-FHF]FHF", \par "R"="BRR", \par "R"=Line, \par "B"=RGB::Brown, \par "H"=RGB::ForestGreen, \par Generations=5 \par ): \par plot(weed) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.13 \par \par 2.6 Animation step-by-step \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}reset(): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 Curve := plot::Curve2d([t^2-4, t/2], t=-3..3): \par Particle := plot::Point2d([a^2-4, a/2], a=-3..3): \par plot(Curve, Particle) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}Curve := plot::Curve2d([t^2-4, t/2], t=-3..a, a=-3..3): \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 Particle := plot::Point2d([a^2-4, a/2], a=-3..3, \par PointSize=2, \par PointColor=RGB::Red \par ): \par plot(Curve, Particle) \par \pard\ri4\plain\f4\fs36\cf1 \plain\f3\fs36\cf0 \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}h := 1: \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 k := 1: \par Parabola := plot::Function2d( \par a*(x-h)^2+k, x=-1..3, a=-2..2 \par ): \par plot(Parabola) \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f4\fs36\cf1 {\pntext\f1\'b7\tab}// radii of both circles \par \pard\li600\ri1\fi-300\plain\f4\fs36\cf1 r := 0.5: \par R := 2: \par \par // coordinates of the particle \par coordinates := \par [(R-r)*cos(phi)+r*cos(((R-r)/r)*phi), \par (R-r)*sin(phi)-r*sin(((R-r)/r)*phi)]: \par \par // static objects \par LargeCircle := plot::Circle2d(R, \par LineColor=RGB::Black \par ): \par \par // objects to animate \par SmallCircle:= plot::Circle2d( \par r, [(R-r)*cos(a), (R-r)*sin(a)], \par a=0..2*PI, \par Color = [0.8,0,0], \par LineColor=RGB::Black, \par LineWidth=0.1, \par Filled=TRUE, \par FillPattern=Solid \par ): \par \par Particle:=plot::Point2d( \par coordinates, \par phi = 0..2*PI, \par PointSize = 2, \par PointColor = [0,0,1] \par ): \par \par Curve := plot::Curve2d( \par coordinates, \par phi =0..a, a=0..2*PI \par ): \par // now we plot all together \par \par plot(LargeCircle, SmallCircle, Particle, Curve, \par Frames=80, \par Scaling=Constrained, \par AxesInFront=TRUE \par ) \par \pard\ri4\plain\f3\fs36\cf0 \par >>>>>>>>>> Time for Exercise 2.14 \par }