POV-Ray : Newsgroups : povray.general : Fitting a gothic trefoil into an equilateral triangle : Re: Fitting a gothic trefoil into an equilateral triangle Server Time
4 Aug 2024 08:26:23 EDT (-0400)
  Re: Fitting a gothic trefoil into an equilateral triangle  
From:
Date: 23 Jun 2003 19:57:06
Message: <3ef793d2$1@news.povray.org>
Hi Mark,

here is "The Making of '#macro Trefoil'"; names starting with an
uppercase letter refer to variables in the code of my last post.

(don't underestimate the importance of the first two of the following
points!)


1. Find out the given and wanted elements (lengths, angles, ...)
   and choose descriptive names for them

You asked for inscribing circles into an equilateral triangle, so all
of its angles are 60 degrees. The length of its sides is given; this
length got the name 'Side'. Obviously the triangle is to be erected
over a horizontal line, so it has a top corner ('Corner1'), a bottom
left corner ('Corner2') and a bottom right corner ('Corner3').
Because the problem has an infinite number of solutions, I decided
to use the radius 'Radius' of the circles as independent variable
and to calculate their midpoints 'Center1', ... , 'Center3'.


2. Choose a coordinate system

Usually the math is easier when many coordinates are 0 or 1: multiplying
by 1 is trivial, by 0 even more; adding of 0 is trivial; squaring 0 or 1
is the same as doing nothing; and so on.
If there is a mirror symmetry with respect to a line/point, then very often
(but not always) this line/point is well suited as coordinate axis/origin.
Sometimes it is easier to solve a standard problem and then transform
it to the required proportions; for example (in POV style): instead
of sphere{C,R ... } use sphere{0,1 ... scale R translate C}.

The trefoil is a problem in plane geometry, so I only use x- and y-
coordinates and set all z=0 (I will leave them out here, but had written
these zeros in the code).
Because circles are to be put into the *corners* of the outer triangle,
I decided to use a corner (Corner2) as origin, so
   Corner2=<0,0>
Corner3 sits on the x-axis, so
   Corner3=<Side,0>.


3. Make a drawing of the geometric situation

In most cases, an approximate scetch without large obvious errors will
suffice. Use thick lines for every known element. Don't believe everything
you see! The drawing can't prove anything, its sole purpose is to trigger
the intuition and to keep track of the known and the not-yet-known
elements. Do this even for very simple situations.
(Please do this *now* to make it easy to follow the following explanations!)


4. Look for properties that allow application of geometric theorems

Very often symmetries, right angles, congruent triangles and parallels
are the key for a solution. If you have none, create them by erecting
perpendiculars, drawing parallels etc.
This is the inspiration part of the solution of geometric problems.


5. Find out relevant elements (coordinates, lengths, angles, ...) until all
   wanted elements are known

This is the transpiration part of the solution of geometric problems.

[ top corner ]
The first step in the trefoil problem is to find the top corner. Due to
the triangle's mirror symmetry with respect to the perpendicular from
the top corner,
   Corner1.x=Side/2.
The y-coordinate is the Height of the triangle, found by the law of
pythagoras in the right-angled triangle
   top point -- bottom left point -- midpoint of base line
so we get
   Height^2 + (Side/2)^2 = Side^2
Solving for Height gives
   Height = sqrt( Side^2 + Side^2/4 ) = sqrt(3)/2*Side

[ centers ]
Now look at the midpoint 'Center2' of a circle touching the sides
emanating from Corner2. Due to symmetry of this circle and the triangle
with respect to the line through Corner2 and Center2, the angle between
this line and the x-axis is 30 degrees (60/2). Now imagine a new point:
the mirror image 'M' of Center1 with respect to the x-axis. The triangle
   Corner2 -- Center1 -- M
has 30+30 degrees at Corner1 (x-axis symmetry), its other two angles are
equal (same symmetry). So all angles are 60 degrees, i.e. this triangle
is equilateral. The vertical side obviously has a length=2*Radius, and
because of the equilaterality, the other sides have the same length. The
part of the x-axis within this triangle is a height of this triangle, and
as seen above with the outer triangle, height=sqrt(3)/2*length_of_side.
But this height of the small triangle is the x-coordinate of Center2!
So we have
   Center2.x = sqrt(3)/2 * 2*Radius = sqrt(3)*Radius
and obviously
   Center2.y = Radius
By symmetry with respect to the perpendicular from the top corner onto
the x-axis:
   Center3.x = Side - sqrt(3)*Radius
   Center3.y = Radius
As seen above,
   distance between Center2 and Corner2
   = length_of_side of the small triangle
   = 2*Radius
Because the three circles are equal,
   distance between Center1 and Corner1 = 2*Radius
I.e. Center1 is 2*Radius below Corner1, so we get
   Center1 = <Side/2, Height-2*Radius>

[ maximal Radius, minimal Radius ]
Because all triangles should lie completely inside the outer triangle,
the maximal Radius is the radius of the incircle. Then (symmetry!)
   center2_for_max_Radius.x = Side/2
Above we found
   Center2.x = sqrt(3)*Radius
For the maximal circle we get
   center2_for_max_Radius.x = sqrt(3)*max_radius
So
   Side/2 = sqrt(3)*max_radius
i.e.
   max_Radius = Side/2/sqrt(3) = Side * sqrt(3)/6
The minimal Radius obviously is zero, so all values in the range
   0 .. Side*sqrt(3)/6
are possible radii.

[ Radius of mutually touching circles ]
The circles are touching when the distance of their centers = 2*Radius.
The situation is easily analyzed by looking at Center2 and Center3:
   Center3.x - Center2.x = 2*touch_Radius [y-coordinates are equal!]
The coordinates of these centers are known:
   Side-sqrt(3)*touch_Radius - sqrt(3)*touch_Radius = 2*touch_Radius
A little calculation solves this for touch_Radius:
   Side = (2*sqrt(3)-2) * touch_Radius
   touch_Radius = Side / (2*sqrt(3)-2) [now expand by (2*sqrt(3)+2):]
   = Side * (sqrt(3)-1)/4

[ center of triangle ]
This point isn't needed for the problem, but I suggest to calculate
almost everything you can: it often gives deeper insight in the
problem, reveals unexpected relations and simplifies other steps.
In the trefoil problem, it helps finding the "true gothic" Radius.
Again because of symmetry,
   Center.x = Side/2
The bisectors of a triangle (which in this case also are angular
bisectors and heights) intersect in its center of gravity and
are divided by this point in a 2:1 ratio. This gives us
   Center.y = Height/3

[ "true gothic" Radius ]
In a "true gothic" situation, all circles meet at the Center, so
their distance from this Center = Radius. In this case, the situation
at the top is most easy:
   gothic_Center1.y - Center.y = gothic_Radius [x-coordinates are equal!]
Because
   Center1.y = Height-2*Radius
we have the special case
   gothic_Center1.y = Height-2*gothic_Radius = sqrt(3)/2*Side-2*gothic_Radius
We already found in the previous section
   Center.y = Height/3 = sqrt(3)/6*Side
Putting all this together and solving for gothic_Radius, we find
   sqrt(3)/2*Side-2*gothic_Radius - sqrt(3)/6*Side = gothic_Radius
   sqrt(3)/3*Side = 3*gothic_Radius
   gothic_Radius = sqrt(3)/9*Side


6. During the paragraph 5 implement everything at once in POV-Ray

This will reveal calculation errors and gives an exact drawing of the
situation reached so far. And it's fun!


.....

I don't know your mathematical background, so maybe this was a little bit
lengthy, but I hope this explanation will contribute to your ability to
successfully attack similar (and more complex) problems.

   Sputnik


--
----------------------------

fr### [at] computermuseumfh-kielde
----------------------------


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.