# How to determine the direction angle of a point relative to the principal direction in the three-dimensional Mohr's circle

The three-dimensional stress state of a point in the solid after rotation is as follows:

EulerMatrix[{α,β,γ}]\[Transpose].{{10, 0,
0}, {0, 20, 0}, {0, 0,
25}}.EulerMatrix[{α,β,γ}]


The three-dimensional Mohr circle represented by this state is as follows:

ContourPlot3D[
Evaluate[((x - #[])^2 + y^2 +
z^2 == #[]^2) & /@ (SortBy[({Mean[#], Abs[#[] - #[]]/
2} & /@ Subsets[Sort[{10, 20, 25}], {2}]), Last])], {x, 0,
30}, {y, -10, 10}, {z, -10, 10}, BoxRatios -> Automatic,
ContourStyle ->
Directive[Orange, Opacity[0.4], Specularity[White, 30]],
Mesh -> None, PlotPoints -> 50, ViewVertical -> {0, 0, 1},
ViewPoint -> {Pi, Pi/2, 2}, AxesOrigin -> {0, 0, 0},
AxesLabel -> {"x", "y", "z"}]


Now we know that the stress in one direction is {12,2,2}

((x - #[])^2 + y^2 + z^2 <= #[[
2]]^2 & /@ ({Mean[#], Abs[#[] - #[]]/2} & /@
Subsets[Sort[{10, 20, 25}], {2}])) /. {x -> 12, y -> 2,
z -> 2}(*The x-axis represents the principal stress,the Y-axis and
the z-axis represents the shear stress*)


How to determine the possible direction angle ({α,β,γ}) of the stress.

The answer of MikeY is very good. I want to modify this code to get faster speed:

em[α_, β_, γ_] := EulerMatrix[{α, β, γ}]\[Transpose].
{{10, 0, 0}, {0, 20, 0}, {0, 0, 25}}.
EulerMatrix[{α, β, γ}]

res = NMinimize[Norm[{12, 2, 2} - Transpose[em[a, b, c]][]], {a, b, c}]
(* {0.876894, {a -> -1.19281, b -> -0.785398, c -> 1.5708}} *)


Not 100% sure of the math on this, as I last took a course in this stuff in 1979, so go easy on me, but...

I think the goal is to find a set of rotations {α,β,γ} such that with principal matrix

$$P =\left( \begin{array}{ccc} 10 & 0 & 0 \\ 0 & 20 & 0 \\ 0 & 0 & 25 \\ \end{array} \right)$$

and Euler matrix $$E$$, a column of $$E^{T}PE$$ is {12,2,2}. This leaves degrees of freedom.

Casting as a minimization problem, arbitrarily choosing the first column...

em[α_, β_, γ_] := EulerMatrix[{α, β, γ}]\[Transpose].
{{10, 0, 0}, {0, 20, 0}, {0, 0, 25}}.
EulerMatrix[{α, β, γ}]

res = NMinimize[Norm[{12, 2, 2} - Transpose[em[a, b, c]][]], {a, b, c}]
(* {0.876894, {a -> -1.19281, b -> -0.785398, c -> 1.5708}} *)


Assuming I have the math right, it is interesting that there wasn't a set {α, β, γ} that drives the norm to zero. Maybe a local minima?

• Thank you very much. But the result em[a, b, c] /. res[] is different from {12, 2, 2} obviously. It is probably impossible to get this stress by rotation transformation.But the values of em[Pi/4, 0, 0] and NMinimize[Norm[{15, 5, 0} - Transpose[em[a, b, c]][]], {a, b, c}] agree very well. Feb 11, 2020 at 0:00
• Yup, there were two distinct min answers for the norm, depending on which column you chose. I didn’t dig any further, as I wasn’t sure I had cast the problem correctly, but thought it might kick-start some answers for you. Feb 11, 2020 at 1:34