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