Application Center - Maplesoft

App Preview:

Perimeter, area and visualization of a plane figure

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application




NULL

Perimeter, area and visualization of a plane figure

 

Dr. Yury Zavarovsky

 

Penza branch of the Financial University

under the Government of the Russian Federation

 

 

  Given a figure in the plane bounded by the non-selfintersecting piecewise smooth curve. Each segment in the border defined by the list in the following format (variable names  in expressions can be arbitrary):    1) If this segment is given by an explicit equation, then  [f(x), x=x1..x2)]    2) If it is given in polar coordinates, then  [f(phi), phi=phi1..phi2, polar] , phi is polar angle    3) If the segment is given parametrically, then  [[f(t), g(t)], t=t1..t2]    4) If several consecutive segments or entire border is a broken line, then it is sufficient to set vertices the broken line [ [x1,y1], [x2,y2], .., xn..yn]]     The first procedure symbolically finds perimeter of the figure. Global variable  Q  saves the lengths of all segments.

 

 

Procedure 1. Perimeter of a plane figure

 

Perimeter := proc (L) local i, var, var1, var2, e, e1, e2, P; global Q; for i to nops(L) do if type(L[i], listlist(algebraic)) then P[i] := seq(simplify(sqrt((L[i, j, 1]-L[i, j+1, 1])^2+(L[i, j, 2]-L[i, j+1, 2])^2)), j = 1 .. nops(L[i])-1) else var := lhs(L[i, 2]); var1 := min(lhs(rhs(L[i, 2])), rhs(rhs(L[i, 2]))); var2 := max(lhs(rhs(L[i, 2])), rhs(rhs(L[i, 2]))); if type(L[i, 1], algebraic) then e := L[i, 1]; if nops(L[i]) = 3 then P[i] := simplify(int(sqrt(e^2+(diff(e, var))^2), var = var1 .. var2)) else P[i] := simplify(int(sqrt(1+(diff(e, var))^2), var = var1 .. var2)) end if else e1 := L[i, 1, 1]; e2 := L[i, 1, 2]; P[i] := abs(simplify(int(sqrt((diff(e1, var))^2+(diff(e2, var))^2), var = var1 .. var2))) end if end if end do; Q := [seq(P[i], i = 1 .. nops(L))]; add(Q[i], i = 1 .. nops(Q)) end proc

 

  The second procedure symbolically finds the area of the figure. For correct work of the procedure, all the segments in the list L  of border must pass sequentially in clockwise or counter-clockwise direction.


Procedure 2. Area of a plane figure

Area := proc (L) local i, var, e, e1, e2, P; for i to nops(L) do if type(L[i], listlist(algebraic)) then P[i] := (1/2)*add(L[i, j, 1]*L[i, j+1, 2]-L[i, j, 2]*L[i, j+1, 1], j = 1 .. nops(L[i])-1) else var := lhs(L[i, 2]); if type(L[i, 1], algebraic) then e := L[i, 1]; if nops(L[i]) = 3 then P[i] := (1/2)*(int(e^2, L[i, 2])) else P[i] := (1/2)*simplify(int(var*(diff(e, var))-e, L[i, 2])) end if else e1 := L[i, 1, 1]; e2 := L[i, 1, 2]; P[i] := (1/2)*simplify(int(e1*(diff(e2, var))-e2*(diff(e1, var)), L[i, 2])) end if end if end do; abs(add(P[i], i = 1 .. nops(L))) end proc

NULL

 

The third procedure shows this figure. To paint the interior of the boundary polyline approximation is used. Required parameters: L - a list of all segments of the border and C - the color of the interior of the figure in the format color = color of the figure. Optional parameters: N - the number of parts for the approximation of each segment (default N = 100) and Boundary is defined by a list for special design of the figure's border (the default border is drawed by a thin black line). The border of the figure can be drawn separately without filling the interior by the global variable Border.

  Procedure 3. Visualization of a plane figure

Picture := proc (L, C, N::posint := 100, Boundary::list := [linestyle = 1]) local i, var, var1, var2, e, e1, e2, P, Q, h; global Border; for i to nops(L) do if type(L[i], listlist(algebraic)) then P[i] := op(L[i]) else var := lhs(L[i, 2]); var1 := lhs(rhs(L[i, 2])); var2 := rhs(rhs(L[i, 2])); h := (var2-var1)/N; if type(L[i, 1], algebraic) then e := L[i, 1]; if nops(L[i]) = 3 then P[i] := seq(subs(var = var1+h*i, [e*cos(var), e*sin(var)]), i = 0 .. N) else P[i] := seq([var1+h*i, subs(var = var1+h*i, e)], i = 0 .. N) end if else e1 := L[i, 1, 1]; e2 := L[i, 1, 2]; P[i] := seq(subs(var = var1+h*i, [e1, e2]), i = 0 .. N) end if end if end do; Q := [seq(P[i], i = 1 .. nops(L))]; Border := plottools[curve]([op(Q), Q[1]], op(Boundary)); [plottools[polygon](Q, C), Border] end proc

Examples of working

 

Example 1

 

L := [[sqrt(-x), x = -1 .. 0], [2*cos(t), t = -(1/2)*Pi .. (1/4)*Pi, polar], [[1, 1], [1/2, 0], [0, 3/2]], [[-1+cos(t), 3/2+(1/2)*sin(t)], t = 0 .. -(1/2)*Pi]]; Perimeter(L); Q; evalf(`%%`); evalf(`%%`); Area(L)

35/24+(5/8)*Pi

(1)

NULL

plots[display](Picture(L, color = grey, [color = "DarkGreen", thickness = 4]), scaling = constrained); plots[display](Border, scaling = constrained)

 

 

 

 

Example 2

 

L := [[[3, -1], [-2, 2], [5, 6], [2, 3/2], [3, -1]]]

Perimeter(L), Q; Area(L); plots[display](Picture(L, color = pink, [color = red, thickness = 3]))

NULL

 

Example 3

 

 

L := [[sin(x), x = 3*Pi*(1/4) .. 5*Pi*(1/4)], [cos(x), x = 5*Pi*(1/4) .. 3*Pi*(1/2)], [-cos(x), x = 3*Pi*(1/2) .. 3*Pi*(1/4)]]

Perimeter(L), Q

2*2^(1/2)*EllipticE((1/2)*2^(1/2), (1/2)*2^(1/2))+2*2^(1/2)*EllipticE((1/2)*2^(1/2)), [2*2^(1/2)*EllipticE((1/2)*2^(1/2), (1/2)*2^(1/2)), 2^(1/2)*EllipticE((1/2)*2^(1/2), (1/2)*2^(1/2)), 2*2^(1/2)*EllipticE((1/2)*2^(1/2))-2^(1/2)*EllipticE((1/2)*2^(1/2), (1/2)*2^(1/2))]

(2)

evalf([%])

[5.936388790, [2.116191002, 1.058095501, 2.762102287]]

(3)

Area(L)

2

(4)

A := plots[display](plot([sin(x), cos(x), -cos(x)], x = -(1/3)*Pi .. 11*Pi*(1/6), color = black)); B := Picture(L, color = cyan, [thickness = 3]); plots[display](A, B, scaling = constrained)



Example 4

A, B, C, E, F := seq(convert([cos((1/2)*Pi+2*Pi*k*(1/5)), sin((1/2)*Pi+2*Pi*k*(1/5))], radical), k = 0 .. 4)

[0, 1], [-(1/4)*2^(1/2)*(5+5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4], [-(1/4)*2^(1/2)*(5-5^(1/2))^(1/2), -(1/4)*5^(1/2)-1/4], [(1/4)*2^(1/2)*(5-5^(1/2))^(1/2), -(1/4)*5^(1/2)-1/4], [(1/4)*2^(1/2)*(5+5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4]

(5)

solve({(y-B[2])/(E[2]-B[2]) = (x-B[1])/(E[1]-B[1]), (y-C[2])/(F[2]-C[2]) = (x-C[1])/(F[1]-C[1])})

{x = 0, y = -(1/20)*(5^(1/2)*(5-5^(1/2))^(1/2)+5^(1/2)*(5+5^(1/2))^(1/2)-5*(5-5^(1/2))^(1/2)+5*(5+5^(1/2))^(1/2))*5^(1/2)/((5-5^(1/2))^(1/2)+(5+5^(1/2))^(1/2))}

(6)

simplify(%)

{x = 0, y = -3/2+(1/2)*5^(1/2)}

(7)

r := -rhs(%[2])

3/2-(1/2)*5^(1/2)

(8)

G, H, K, M, P := op(expand([seq(convert([r*cos(-(1/2)*Pi+2*Pi*k*(1/5)), r*sin(-(1/2)*Pi+2*Pi*k*(1/5))], radical), k = 0 .. 4)]))

[0, -3/2+(1/2)*5^(1/2)], [(3/8)*2^(1/2)*(5+5^(1/2))^(1/2)-(1/8)*5^(1/2)*2^(1/2)*(5+5^(1/2))^(1/2), -(1/2)*5^(1/2)+1], [(3/8)*2^(1/2)*(5-5^(1/2))^(1/2)-(1/8)*2^(1/2)*5^(1/2)*(5-5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4], [-(3/8)*2^(1/2)*(5-5^(1/2))^(1/2)+(1/8)*2^(1/2)*5^(1/2)*(5-5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4], [-(3/8)*2^(1/2)*(5+5^(1/2))^(1/2)+(1/8)*5^(1/2)*2^(1/2)*(5+5^(1/2))^(1/2), -(1/2)*5^(1/2)+1]

(9)

L := [[A, M, B, P, C, G, E, H, F, K]]

[[[0, 1], [-(3/8)*2^(1/2)*(5-5^(1/2))^(1/2)+(1/8)*2^(1/2)*5^(1/2)*(5-5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4], [-(1/4)*2^(1/2)*(5+5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4], [-(3/8)*2^(1/2)*(5+5^(1/2))^(1/2)+(1/8)*5^(1/2)*2^(1/2)*(5+5^(1/2))^(1/2), -(1/2)*5^(1/2)+1], [-(1/4)*2^(1/2)*(5-5^(1/2))^(1/2), -(1/4)*5^(1/2)-1/4], [0, -3/2+(1/2)*5^(1/2)], [(1/4)*2^(1/2)*(5-5^(1/2))^(1/2), -(1/4)*5^(1/2)-1/4], [(3/8)*2^(1/2)*(5+5^(1/2))^(1/2)-(1/8)*5^(1/2)*2^(1/2)*(5+5^(1/2))^(1/2), -(1/2)*5^(1/2)+1], [(1/4)*2^(1/2)*(5+5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4], [(3/8)*2^(1/2)*(5-5^(1/2))^(1/2)-(1/8)*2^(1/2)*5^(1/2)*(5-5^(1/2))^(1/2), (1/4)*5^(1/2)-1/4]]]

(10)

plots[display](Picture(L, color = red, [color = yellow, thickness = 5]), scaling = constrained); Perimeter = Perimeter(L); Approximation = evalf(rhs(%)); Area = Area(L); Approximation = evalf(rhs(%))

Approximation = 1.010312947

(11)

``

 

 

 

Example 5 is more complicated .

 

3 circles on the plane C1, C2 and C3 defined by the parametric equations  of their borders. We want to find the perimeter, area, and paint the figure  C3 minus (C1 union C2) .

 

Example 5

 

C1 := {x = -sqrt(7)+4*cos(t), y = 4*sin(t)}; C2 := {x = 3*cos(s), y = 3+3*sin(s)}; C3 := {x = 4+5*cos(u), y = 5*sin(u)}

sol1 := simplify(allvalues(solve({rhs(C1[1]) = rhs(C3[1]), rhs(C1[2]) = rhs(C3[2])}, {t, u})))

{t = arccos((1/4)*(7+4*7^(1/2))/(7^(1/2)+4)), u = -arctan(3/4)+Pi}

(12)

t1 := -rhs(sol1[1]); u1 := -rhs(sol1[2])

arctan(3/4)-Pi

(13)

sol2 := simplify([allvalues(solve({rhs(C1[1]) = rhs(C2[1]), rhs(C1[2]) = rhs(C2[2])}, {s, t}))])

[{s = -arctan((1/3)*(9+7^(1/2)*55^(1/2))/(-7^(1/2)+55^(1/2))), t = -arctan(3*(-23+7^(1/2)*55^(1/2))/(23*7^(1/2)+9*55^(1/2)))}, {s = -arctan((1/3)*(-9+7^(1/2)*55^(1/2))/(7^(1/2)+55^(1/2)))+Pi, t = -arctan(3*(23+7^(1/2)*55^(1/2))/(-23*7^(1/2)+9*55^(1/2)))+Pi}]

(14)

t2 := rhs(sol2[1, 2]); s1 := rhs(sol2[1, 1])

-arctan((1/3)*(9+7^(1/2)*55^(1/2))/(-7^(1/2)+55^(1/2)))

(15)

sol3 := simplify([allvalues(solve({rhs(C3[1]) = rhs(C2[1]), rhs(C3[2]) = rhs(C2[2])}, {s, u}))])

[{s = arctan((1/3)*(-9+4*91^(1/2))/(4+91^(1/2))), u = arctan(3*(41+4*91^(1/2))/(-164+9*91^(1/2)))+Pi}, {s = arctan((1/3)*(9+4*91^(1/2))/(-4+91^(1/2)))-Pi, u = arctan(3*(-41+4*91^(1/2))/(164+9*91^(1/2)))+Pi}]

(16)

s2 := rhs(sol3[1, 1]); u2 := rhs(sol3[1, 2])

arctan(3*(41+4*91^(1/2))/(-164+9*91^(1/2)))+Pi

(17)

L := [[[rhs(C1[1]), rhs(C1[2])], t = t1 .. t2], [[rhs(C2[1]), rhs(C2[2])], s = s1 .. s2], [[rhs(C3[1]), rhs(C3[2])], u = u2 .. u1]]

[[[-7^(1/2)+4*cos(t), 4*sin(t)], t = -arccos((1/4)*(7+4*7^(1/2))/(7^(1/2)+4)) .. -arctan(3*(-23+7^(1/2)*55^(1/2))/(23*7^(1/2)+9*55^(1/2)))], [[3*cos(s), 3+3*sin(s)], s = -arctan((1/3)*(9+7^(1/2)*55^(1/2))/(-7^(1/2)+55^(1/2))) .. arctan((1/3)*(-9+4*91^(1/2))/(4+91^(1/2)))], [[4+5*cos(u), 5*sin(u)], u = arctan(3*(41+4*91^(1/2))/(-164+9*91^(1/2)))+Pi .. arctan(3/4)-Pi]]

(18)

Perimeter(L), Q

4*arccos((1/4)*(7+4*7^(1/2))/(7^(1/2)+4))-4*arctan(3*(-23+7^(1/2)*55^(1/2))/(23*7^(1/2)+9*55^(1/2)))+3*arctan(3*(36+9*7^(1/2)*13^(1/2)+4*7^(1/2)*55^(1/2)+7*55^(1/2)*13^(1/2)+9*7^(1/2)-9*55^(1/2)-28*13^(1/2)+4*55^(1/2)*7^(1/2)*13^(1/2))/(-36*7^(1/2)-63*13^(1/2)+36*55^(1/2)+9*55^(1/2)*7^(1/2)*13^(1/2)+81-36*7^(1/2)*13^(1/2)+9*7^(1/2)*55^(1/2)-28*55^(1/2)*13^(1/2)))+8*Pi+5*arctan(3*(328+7*91^(1/2))/(72*91^(1/2)-287)), [4*arccos((1/4)*(7+4*7^(1/2))/(7^(1/2)+4))-4*arctan(3*(-23+7^(1/2)*55^(1/2))/(23*7^(1/2)+9*55^(1/2))), 3*arctan(3*(36+9*7^(1/2)*13^(1/2)+4*7^(1/2)*55^(1/2)+7*55^(1/2)*13^(1/2)+9*7^(1/2)-9*55^(1/2)-28*13^(1/2)+4*55^(1/2)*7^(1/2)*13^(1/2))/(-36*7^(1/2)-63*13^(1/2)+36*55^(1/2)+9*55^(1/2)*7^(1/2)*13^(1/2)+81-36*7^(1/2)*13^(1/2)+9*7^(1/2)*55^(1/2)-28*55^(1/2)*13^(1/2)))+3*Pi, 5*arctan(3*(328+7*91^(1/2))/(72*91^(1/2)-287))+5*Pi]

(19)

evalf(%)

30.83251211, [3.709322437, 5.189200761, 21.93398891]

(20)

Area(L); evalf(%)

61.16217533

(21)

A := plot([[rhs(C1[1]), rhs(C1[2]), t = 0 .. 2*Pi], [rhs(C2[1]), rhs(C2[2]), s = 0 .. 2*Pi], [rhs(C3[1]), rhs(C3[2]), u = 0 .. 2*Pi]], color = black)

B := Picture(L, color = green, [color = black, thickness = 4]); plots[display](A, B, scaling = constrained)

NULL