Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- rotationangle[{i_, j_}] := Which[
- i >= 0 && j >= 0, VectorAngle[{1, 0}, {i, j}],
- i < 0 && j >= 0, VectorAngle[{0, 1}, {i, j}] + Pi/2,
- i < 0 && j < 0, VectorAngle[{-1, 0}, {i, j}] + Pi,
- i >= 0 && j < 0, VectorAngle[{0, -1}, {i, j}] + 3 Pi/2]
- quadrant[{i_, j_}] := Which[
- i >= 0 && j >= 0, 1, i < 0 && j >= 0, 2,
- i < 0 && j < 0, 3, i >= 0 && j < 0, 4]
- anglecalc[u_, v_] := Module[{a, theta, r},
- a = VectorAngle[u, v];
- theta = -rotationangle[u];
- r = RotationTransform[theta];
- If[quadrant[r[v]] > 2, 2 Pi - a, a]]
- (* case 1 *)
- {a, b} = {{{4, 3}, {3, 0}}, {{3, 0}, {10, 1}}};
- Graphics[{Arrowheads[0.1], Arrow[{a, b}]}, ImageSize -> {150, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- r = RotationTransform[90 Degree];
- (* case 2 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.22], Arrow[{a, b}]}, ImageSize -> {Automatic, 150}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 3 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.1], Arrow[{a, b}]}, ImageSize -> {150, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 4 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.22], Arrow[{a, b}]}, ImageSize -> {Automatic, 150}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 5 *)
- {a, b} = {{{4, 3}, {3, 0}}, {{3, 0}, {10, -7}}};
- Graphics[{Arrowheads[0.12], Arrow[{a, b}]}, ImageSize -> {120, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 6 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.09], Arrow[{a, b}]}, ImageSize -> {Automatic, 120}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 7 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.12], Arrow[{a, b}]}, ImageSize -> {120, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 8 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.09], Arrow[{a, b}]}, ImageSize -> {Automatic, 120}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 9 *)
- {a, b} = {{{4, 3}, {3, 0}}, {{3, 0}, {-7, -5}}};
- Graphics[{Arrowheads[0.1], Arrow[{a, b}]}, ImageSize -> {150, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 10 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.13], Arrow[{a, b}]}, ImageSize -> {Automatic, 150}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 11 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.1], Arrow[{a, b}]}, ImageSize -> {150, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 12 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.13], Arrow[{a, b}]}, ImageSize -> {Automatic, 150}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 13 *)
- {a, b} = {{{4, 3}, {3, 0}}, {{3, 0}, {-7, 5}}};
- Graphics[{Arrowheads[0.1], Arrow[{a, b}]}, ImageSize -> {150, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 14 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.21], Arrow[{a, b}]}, ImageSize -> {Automatic, 150}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 15 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.1], Arrow[{a, b}]}, ImageSize -> {150, Automatic}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- (* case 16 *)
- {a, b} = r /@ {a, b};
- Graphics[{Arrowheads[0.21], Arrow[{a, b}]}, ImageSize -> {Automatic, 150}]
- {u, v} = a - b;
- N[anglecalc[v, -u] 180/Pi]
- myVectorAngle[{a_, b_}, {c_, d_}] :=
- Evaluate[With[{code =
- ReIm[(c + I d)/(a + I b)] // ComplexExpand // Simplify},
- ArcTan @@ code
- ]]
Add Comment
Please, Sign In to add comment