# How to plot Morley triangle by Synthetic Geometry method?

As the Wiki

The three points of intersection of the adjacent angle trisectors form an equilateral triangle, called the Morley triangle

So I write this code:

RandomInstance[
GeometricScene[{a, b, c, d, e, f}, {Triangle[{a, b, c}],
Triangle[{d, e, f}],
GeometricAssertion[{c, e, f, b}, {"EqualAngles", a}],
GeometricAssertion[{c, d, f, a}, {"EqualAngles", b}],
GeometricAssertion[{a, e, d, b}, {"EqualAngles", c}]}]]


But I get nothing. Or have I made some mistake?

• I think the task currently is too complex for GeometricScene. The following RandomInstance[ GeometricScene[{a, b, c, d, e, f}, {Triangle[{a, b, c}], GeometricAssertion[{c, e, f, b}, {"EqualAngles", a}]}]] works. Jan 21 at 9:48
• RandomInstance[ GeometricScene[{a -> {0, 0}, b -> {1, 0}, c -> {0, 1}, d, e, f}, {Triangle[{a, b, c}], GeometricAssertion[{c, e, f, b}, {"EqualAngles", a}], GeometricAssertion[{c, d, f, a}, {"EqualAngles", b}]}]] fails. Jan 21 at 10:09
• @user64494 To be honest, I haven't had any success so far with GeometricScene for geometric problems
– yode
Jan 21 at 10:18
• @user64494 Look the current answer :)
– yode
Jan 21 at 13:49
• It's 1 for 4 in my trials, good enough to play MLB. And once is enough to claim I can reproduce the answer, but it's not very satisfying. Jan 21 at 19:45

Thanks at @Koiadk Grizzly and @yode some hint about this question. Here we set the orienteering of the angle and triangle and it seems that faster then before.

• Edit-3
RandomInstance[GeometricScene[{a, b, c, d, e, f}, {
PlanarAngle[a -> {b, f}] == 1/3 PlanarAngle[a -> {b, c}],
PlanarAngle[a -> {e, c}] == 1/3 PlanarAngle[a -> {b, c}],
PlanarAngle[b -> {f, a}] == 1/3 PlanarAngle[b -> {c, a}],
PlanarAngle[b -> {c, d}] == 1/3 PlanarAngle[b -> {c, a}],
PlanarAngle[c -> {d, b}] == 1/3 PlanarAngle[c -> {a, b}],
PlanarAngle[c -> {a, e}] == 1/3 PlanarAngle[c -> {a, b}],
GeometricAssertion[{Triangle[{a, b, f}], Triangle[{b, c, d}],
Triangle[{c, a, e}], Triangle[{d, e, f}], Triangle[{a, b, c}]},
"Counterclockwise"]}], RandomSeeding -> Automatic] // Timing


• Edit-2
RandomInstance[
GeometricScene[{a, b, c, d, e, f}, {Triangle[{a, b, c}],
Triangle[{d, e, f}],
PlanarAngle[a -> {b, f}, "Counterclockwise"] ==
PlanarAngle[a -> {f, e}, "Counterclockwise"] ==
PlanarAngle[a -> {e, c}, "Counterclockwise"],
PlanarAngle[b -> {c, d}, "Counterclockwise"] ==
PlanarAngle[b -> {d, f}, "Counterclockwise"] ==
PlanarAngle[b -> {f, a}, "Counterclockwise"],
PlanarAngle[c -> {a, e}, "Counterclockwise"] ==
PlanarAngle[c -> {e, d}, "Counterclockwise"] ==
PlanarAngle[c -> {d, b}, "Counterclockwise"],
GeometricAssertion[{Triangle[{a, b, f}], Triangle[{b, c, d}],
Triangle[{c, a, e}], Triangle[{d, e, f}], Triangle[{a, b, c}]},
"Counterclockwise"]}]] // Timing


• Edit-1
Clear[a, b, c, d, e, f];
RandomInstance[
GeometricScene[{a, b, c, d, e, f}, {Triangle[{a, b, c}],
Triangle[{d, e, f}],
PlanarAngle[a -> {b, f}, "Counterclockwise"] ==
PlanarAngle[a -> {f, e}, "Counterclockwise"] ==
PlanarAngle[a -> {e, c}, "Counterclockwise"],
PlanarAngle[b -> {c, d}, "Counterclockwise"] ==
PlanarAngle[b -> {d, f}, "Counterclockwise"] ==
PlanarAngle[b -> {f, a}, "Counterclockwise"],
PlanarAngle[c -> {a, e}, "Counterclockwise"] ==
PlanarAngle[c -> {e, d}, "Counterclockwise"] ==
PlanarAngle[c -> {d, b}, "Counterclockwise"],
RegionMember[Triangle[{a, b, c}], d],
RegionMember[Triangle[{a, b, c}], e],
RegionMember[Triangle[{a, b, c}], f]}]]


• RandomInstance[ GeometricScene[{a -> {0, 0}, b -> {1, 0}, c -> {1, 1}, , d, e, f}, {Triangle[{a, b, c}], Triangle[{d, e, f}], PlanarAngle[a -> {b, f}, "Counterclockwise"] == PlanarAngle[a -> {f, e}, "Counterclockwise"] == PlanarAngle[a -> {e, c}, "Counterclockwise"], PlanarAngle[b -> {c, d}, "Counterclockwise"] == PlanarAngle[b -> {d, f}, ...] also fails. (The whole code is too long to be quoted here.) Jan 22 at 10:27

Use PlanarAngle instead of "EqualAngles".

RandomInstance[
GeometricScene[{a, b, c, d, e, f}, {Triangle[{a, b, c}],
PlanarAngle[{b, a, d}] == PlanarAngle[{e, a, d}] ==
PlanarAngle[{e, a, c}],
PlanarAngle[{d, b, a}] == PlanarAngle[{d, b, f}] ==
PlanarAngle[{f, b, c}],
PlanarAngle[{a, c, e}] == PlanarAngle[{b, c, f}] ==
PlanarAngle[{f, c, e}],
GeometricAssertion[{d, e, f}, {"SameSide",
Line[{a, b}]}, {"SameSide", Line[{b, c}]}, {"SameSide",
Line[{c, a}]}], Triangle[{d, e, f}]}]]


Then you can find the small triangle is a regular triangle.

FindGeometricConjectures[%]


Which is the Morley triangle.

• It should be noticed that RandomInstance[ GeometricScene[{a -> {0, 0}, b -> {1, 0}, c -> {1, 1}, d, e, f}, {Triangle[{a, b, c}], PlanarAngle[{b, a, d}] == PlanarAngle[{e, a, d}] == PlanarAngle[{e, a, c}], PlanarAngle[{d, b, a}] == PlanarAngle[{d, b, f}] == PlanarAngle[{f, b, c}], PlanarAngle[{a, c, e}] == PlanarAngle[{b, c, f}] == PlanarAngle[{f, c, e}], GeometricAssertion[{d, e, f}, {"SameSide", Line[{a, b}]}, {"SameSide", Line[{b, c}]}, {"SameSide", Line[{c, a}]}], Triangle[{d, e, f}]}]] fails. Jan 22 at 6:02
• @user64494 Remove , Triangle[{d, e, f}] and it will be fine, but I don't know why this triangle thing would crush it. Jan 22 at 7:20
• @KodiadkGrizzly: Then FindGeometricConjectures[%] produces a conjecture which does not deal with Triangle[{d, e, f}]. Jan 22 at 8:27
• d ∈ Triangle[{a, b, c}], e ∈ Triangle[{a, b, c}], f ∈ Triangle[{a, b, c}] is elegant a little than those Sameside. Just make a note here. :)
– yode
Jan 22 at 9:48
• @yode; RandomInstance[ GeometricScene[{a -> {0, 0}, b -> {1, 0}, c -> {1, 1}, d, e, f}, {Triangle[{a, b, c}], PlanarAngle[{b, a, d}] == PlanarAngle[{e, a, d}] == PlanarAngle[{e, a, c}], PlanarAngle[{d, b, a}] == PlanarAngle[{d, b, f}] == PlanarAngle[{f, b, c}], PlanarAngle[{a, c, e}] == PlanarAngle[{b, c, f}] == PlanarAngle[{f, c, e}], GeometricAssertion[d \[Element] Triangle[{a, b, c}], e \[Element] Triangle[{a, b, c}], f \[Element] Triangle[{a, b, c}]], Triangle[{d, e, f}]}]] also fails. Jan 22 at 10:21

We can prove the Morley theorem by Mathematica.

Without loss of generality,we can assume that a={1,0} and b,c on the unit-circle.

we can divide the angle $$\angle bca$$ by divide the arc $$\overset{\frown}{ab}$$ by two points ca and cb etc.

Clear["Global*"];
{a, ca, cb, b} = AngleVector /@ Subdivide[0, β, 3];
{b, ab, ac, c} = AngleVector /@ Subdivide[β, γ, 3];
{c, bc, ba, a} = AngleVector /@ Subdivide[γ, 2 π, 3];
d = Block[{s, t},
Rescale[s, {0, 1}, {b, bc}] /.
Solve[Rescale[s, {0, 1}, {b, bc}] ==
Rescale[t, {0, 1}, {c, cb}], {s, t}]] //
First;(* intersection point of Line[b,bc] and Line[c,cb] *)
e = Block[{s, t},
Rescale[s, {0, 1}, {c, ca}] /.
Solve[Rescale[s, {0, 1}, {c, ca}] ==
Rescale[t, {0, 1}, {a, ac}], {s, t}]] // First;
f = Block[{s, t},
Rescale[s, {0, 1}, {a, ab}] /.
Solve[Rescale[s, {0, 1}, {a, ab}] ==
Rescale[t, {0, 1}, {b, ba}], {s, t}]] // First;
FullSimplify[{(d - e) . (d - e) == (e - f) . (e - f), (e - f) . (e -
f) == (f - d) . (f - d), (f - d) . (f - d) == (d - e) . (d - e)}]

β = 50 Degree;
γ = 200 Degree;
Manipulate[
Dynamic@Graphics[{Circle[], {Dashed,
Line[{{a, ab}, {a, ac}, {b, bc}, {b, ba}, {c, ca}, {c,
cb}}]}, {FaceForm[], EdgeForm[Blue],
Triangle[{a, b, c}]}, {Opacity[.5], Green, Triangle[{a, b, f}],
Triangle[{b, c, d}], Triangle[{c, a, e}]}, {Red,
Point[{a, b, c}]}, {Orange, Triangle[{d, e, f}]},
Text[Style[#, Blue, FontSize -> 20],
ToExpression@#, -1.2 ToExpression@#] & /@ {"a", "b", "c", "ab",
"ac", "bc", "ba", "ca", "cb"}}], {β,
0.1, γ}, {γ, β, 2 π},
LocalizeVariables -> False]


{True, True, True}

• +1. Nice. Also see that demonstation. Jan 23 at 17:19
• And that info. As far as I rememder it, your proof is similar to the proof from Coxeter, H. S. M. and Greitzer, S. L. Jan 23 at 17:28
• A good code is a commented code. Your "etc" is too poor. Jan 23 at 20:15
• @user64494 Thanks! I have add some labels to this animation. The proof is different from Coxeter, H. S. M. and Greitzer, S. L. since here we only need the one outside circle instead of three small circles. Jan 24 at 0:22
• d = Block[{s, t}, {1 - s, s} . {b, bc} /. Solve[{1 - s, s} . {b, bc} == {1 - t, t} . {c, cb}, {s, t}]] // First; and {# . # &[d - e] == # . # &[ e - f], # . # &[e - f] need to be commented. Jan 24 at 6:37

Well actually it is a built-in entity:

RandomInstance[Entity["GeometricScene", "MorleysTheorem"][
EntityProperty["GeometricScene", "Scene"]]]
`

• The fact that this theorem is built-in rather than easy to construct does solve the problem posed, which is impressive. Kudos, yode. But a different problem of comparable complexity might not be so honored. So this (admirable!) solution does not make the feature any more reliable or easy to use. I have often faced similar situations with built-in examples. They help in the short run, only. Jan 27 at 15:56