Note: This page has been translated by MathWorks. Please click here

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Affine linear transformations
with
a vector *b* and
a matrix *A* can
be applied to graphical objects via transformation objects. There
are special transformations such as translations, scaling, and rotations
as well as general affine linear transformations:

`plot::Translate2d([b1, b2], Primitive1, Primitive2, ...)`

applies the translation by the vector*b*=`[b1, b2]`

to all points of 2D primitives.`plot::Translate3d([b1, b2, b3], Primitive1, ...)`

applies the translation by the vector*b*=`[b1, b2, b3]`

to all points of 3D primitives.`plot::Reflect2d([x1, y1], [x2, y2], Primitive1, ...)`

reflects all 2D primitives about the line through the points`[x1, y1]`

and`[x2, y2]`

.`plot::Reflect3d([x, y, z], [nx, ny, nz], Primitive1, ...)`

reflects all 3D primitives about the plane through the point`[x, y, z]`

with the normal`[nx, ny, nz]`

.`plot::Rotate2d(angle, [c1, c2], Primitive1, ...)`

rotates all points of 2D primitives counter clockwise by the given angle about the pivot point`[c1, c2]`

.`plot::Rotate3d(angle, [c1, c2, c3], [d1, d2, d3], Primitive1, ...)`

rotates all points of 3D primitives by the given angle around the rotation axis specified by the pivot point`[c1, c2, c3]`

and the direction`[d1, d2, d3]`

.`plot::Scale2d([s1, s2], Primitive1, ...)`

applies the diagonal scaling matrix`diag`

(`s1`

,`s2`

) to all points of 2D primitives.`plot::Scale3d([s1, s2, s3], Primitive1, ...)`

applies the diagonal scaling matrix`diag`

(`s1`

,`s2`

,`s3`

) to all points of 3D primitives.`plot::Transform2d([b1, b2], A, Primitive1, ...)`

applies the general affine linear transformation with a 2×2 matrix`A`

and a vector*b*=`[b1, b2]`

to all points of 2D primitives.`plot::Transform3d([b1, b2, b3], A, Primitive1, ...)`

applies the general affine linear transformation with a 3×3 matrix`A`

and a vector*b*=`[b1, b2, b3]`

to all points of 3D primitives.

The ellipses `plot::Ellipse2d`

provided
by the `plot`

library have axes parallel to the coordinate
axes. We use a rotation to create an ellipse with a different orientation:

center := [1, 2]: ellipse := plot::Ellipse2d(2, 1, center): plot(plot::Rotate2d(PI/4, center, ellipse))

Transform objects can be animated. We build a group consisting of the ellipse and its symmetry axes. An animated rotation is applied to the group:

g := plot::Group2d( ellipse, plot::Line2d(center, [center[1] + 2, center[2]]), plot::Line2d(center, [center[1] - 2, center[2]]), plot::Line2d(center, [center[1], center[2] + 1]), plot::Line2d(center, [center[1], center[2] - 1]) ): plot(plot::Rotate2d(a, center, a = 0..2*PI, g)):

Objects inside an animated transformation can be animated, too.
The animations run independently and may be synchronized via suitable
values of the `TimeRange`

as described in section Advanced Animations: The Synchronization Model.

We generate a sphere *s* of
radius *r* with
center *c* = (*c*_{x}, *c*_{y}, *c*_{z}).
We wish to visualize the tangent plane at various points of the surface.
We start with the tangent plane of the north pole and rotate it around
the *y* axes
(i.e., along the line with zero longitude) by the polar angle *θ* for
the first 3 seconds. Then it is rotated around the *z*-axis
(i.e., along the line with constant latitude) by the azimuth angle *ϕ*.
We end up with the tangent plane at the point *x* = *c*_{x} + *cos*(*ϕ*) *sin*(*θ*), *y* = *c*_{y} + *sin*(*ϕ*) *sin*(*θ*), *z* = *c*_{z} + *cos*(*θ*).
The two rotations are realized as a nested animation: By specifying
disjoint time ranges, the second rotation (around the *z*-axis)
starts when the first rotation (around the *y*-axis)
is finished:

r := 1: // the radius of the sphere R := 1.01: // increase the radius a little bit c := [0, 0, 0]: // the center of the sphere thet := PI/3: // spherical coordinates of phi := PI/4: // the final point p // the final point: p := plot::Point3d(c[1] + R*cos(phi)*sin(thet), c[2] + R*sin(phi)*sin(thet), c[3] + R*cos(thet), PointSize = 2*unit::mm, Color = RGB::Black): // the sphere: s := plot::Sphere(r, c, Color = RGB::Green): // the meridian at thet = 0 c1 := plot::Curve3d([c[1] + R*sin(t), c[2], c[3] + R*cos(t)], t = 0..thet, Color = RGB::Black): // the meridian at thet = 0 c2 := plot::Curve3d([c[1] + R*cos(t)*sin(thet), c[2] + R*sin(t)*sin(thet), c[3] + R*cos(thet)], t = 0..phi, Color = RGB::Black): // form a group consisting of the tangent plane and its normal: g := plot::Group3d( plot::Surface([c[1] + u, c[2] + v, c[3] + R], u = -1..1, v = -1..1, Mesh = [2, 2], Color = RGB::Red.[0.3]), plot::Arrow3d([c[1], c[2], c[3] + R], [c[1], c[2], c[3] + R + 0.7]) ): // rotate the group for 3 seconds along the meridian: g := plot::Rotate3d(a, c, [0, 1, 0], a = 0..thet, g, TimeRange = 0..3): // rotate the group for further 3 seconds along the azimuth: g := plot::Rotate3d(a, c, [0, 0, 1], a = 0..phi, g, TimeRange = 3..6): plot(s, g, c1, c2, p, CameraDirection = [2, 3, 4]):

Was this topic helpful?