# 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. Commented Jan 21, 2022 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. Commented Jan 21, 2022 at 10:09
• @user64494 To be honest, I haven't had any success so far with GeometricScene for geometric problems
– yode
Commented Jan 21, 2022 at 10:18
• @user64494 Look the current answer :)
– yode
Commented Jan 21, 2022 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. Commented Jan 21, 2022 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.) Commented Jan 22, 2022 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. Commented Jan 22, 2022 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. Commented Jan 22, 2022 at 7:20
• @KodiadkGrizzly: Then FindGeometricConjectures[%] produces a conjecture which does not deal with Triangle[{d, e, f}]. Commented Jan 22, 2022 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
Commented Jan 22, 2022 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. Commented Jan 22, 2022 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. Commented Jan 23, 2022 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. Commented Jan 23, 2022 at 17:28
• A good code is a commented code. Your "etc" is too poor. Commented Jan 23, 2022 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. Commented Jan 24, 2022 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. Commented Jan 24, 2022 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. Commented Jan 27, 2022 at 15:56