Computing Intersection Points of Two Surfaces

Computing Intersection Points of Two Surfaces
Loading the math board and drawing, please wait…
2016-04-28 22:20
This example demonstrates how to compute the intersection points of two explicit surfaces. It involves core mathematical concepts such as coordinate geometry and solid geometry. Key construction elements include GeoGebra commands and objects like Function, If, Polygon, PointIn, Segment, Textfield, Point, Sum, Zip, Length, Sequence, RemoveUndefined, Append, PolyLine, ImplicitCurve, IntersectPath. Suitable for high school and above students to explore surface intersection problems.

GeoGebra Commands & Parameters

  1. Function(f(a, b), a, x_{min} - 0.2, x_{max} + 0.2, b, y_{min} - 0.2, y_{max} + 0.2) → g
  2. If(Length[RemoveUndefined[Join[Zip[Mirror[{Roots[f0(a, x), y_{min}, y_{max}]}, y = x] + (a, 0), a, Sequence[x_{min} + ((x_{max} - x_{min}) / N_P * i), i, 0, N_P]]]]] ≟ 0, false, true) → lb1
  3. If(lb1, RemoveUndefined[Join[Zip[Reverse[{Roots[f0(x, a), x_{min}, x_{max}]}] + (0, a), a, Sequence[y_{min} + ((y_{max} - y_{min}) / N_P * i), i, 0, N_P]]]], Sequence[(10000, 10000), k, 1, 50]) → P2yyx
  4. If(lb1, RemoveUndefined[Join[Zip[Mirror[{Roots[f0(a, x), y_{min}, y_{max}]}, y = x] + (a, 0), a, Sequence[x_{min} + ((x_{max} - x_{min}) / N_P * i), i, 0, N_P]]]], Sequence[(10000, 10000), k, 1, 50]) → P1xxy
  5. Polygon((x_{min}, y_{min}), (x_{max}, y_{min}), (x_{max}, y_{max}), (x_{min}, y_{max})) → poly1, b, c, d, e
  6. PointIn(poly1) → PTest
  7. Segment(B02, B01) → a
  8. Textfield(v_1) → inputBox2
  9. Textfield(f) → inputBox3
  10. Textfield(x_{min}) → inputBox4
  11. Textfield(x_{max}) → inputBox5
  12. Textfield(y_{max}) → inputBox6
  13. Textfield(z_{max}) → inputBox7
  14. Textfield(y_{min}) → inputBox8
  15. Textfield(z_{min}) → inputBox9
  16. Point(a, 1 - zzii_B) → A
  17. Textfield(N_P) → inputBox10
  18. Sum(Sequence[If[f(x(PTest), y(PTest)) - f(x(Element[lr01, i]), y(Element[lr01, i])) > 0, 1, 0], i, 1, n]) → ext1
  19. Zip((x(a), y(a), g(x(a), y(a))), a, Join[{P1xxy, P2yyx}]) → list1
  20. Length(list1) → Lä
  21. Textfield(step) → inputBox12
  22. Textfield(zoom_{3D}) → InputBox1
  23. Sequence((x(Element[lr01, i]), y(Element[lr01, i]), f(x(Element[lr01, i]), y(Element[lr01, i]))), i, 1, n) → lr013
  24. Sequence((x(Element[lr02, i]), y(Element[lr02, i]), f(x(Element[lr02, i]), y(Element[lr02, i]))), i, 1, n) → lr023
  25. RemoveUndefined(Sequence[If[f(x(PTest), y(PTest)) - f(x(Element[lr01, i]), y(Element[lr01, i])) > 0, i, NaN], i, 1, n]) → lr04
  26. Zip(Vector[b, a], a, Sequence[Element[lr01, Element[lr04, i]], i, 1, Length[lr04]], b, Sequence[Element[lr02, Element[lr04, i]], i, 1, Length[lr04]]) → lr06
  27. Zip(Vector[b, a], a, Sequence[Element[lr013, Element[lr04, i]], i, 1, Length[lr04]], b, Sequence[Element[lr023, Element[lr04, i]], i, 1, Length[lr04]]) → lr063
  28. Zip(Vector[a, b], a, Sequence[Element[lr01, Element[lr05, i]], i, 1, Length[lr05]], b, Sequence[Element[lr02, Element[lr05, i]], i, 1, Length[lr05]]) → lr07
  29. Zip(Vector[a, b], a, Sequence[Element[lr013, Element[lr05, i]], i, 1, Length[lr05]], b, Sequence[Element[lr023, Element[lr05, i]], i, 1, Length[lr05]]) → lr073
  30. RemoveUndefined(Sequence[If[f(x(PTest), y(PTest)) - f(x(Element[lr01, i]), y(Element[lr01, i])) > 0, i, (-i)], i, 1, n]) → lr04c
  31. Append(lr04c, Element[lr04c, 1]) → lr04cc
  32. Sum(Sequence[If[(Element[lr04cc, i] * Element[lr04cc, i + 1]) < 0, 1, 0], i, 1, n + 1]) → lr04ccc
  33. If(ext1 ≟ n, "Max", If[ext1 ≟ 0, "Min", If[(lr04ccc > 2) ∧ (lr04ccc ≤ 4), "saddle ? ", "?"]]) → TT1
  34. PolyLine({(0, 0.5019607843), (0.1, 0.4980392157), (0.2, 0), (0.3, 0), (0.4, 0.2), (0.5, 0.2), (0.7, 1), (1, 1)}) → Ro
  35. PolyLine({(0, 0), (0.2, 0), (0.3, 0.6), (0.4, 1), (0.7, 1), (0.9, 0.2), (1, 0)}) → Gr
  36. PolyLine({(0, 0.5019607843), (0.1, 1), (0.3, 1), (0.4, 0.8), (0.5, 0), (0.6, 0), (0.7, 0.4), (0.8, 0.2), (0.9, 0.4), (1, 0)}) → Bl
  37. Point(Pxy) → D
  38. Textfield(z0) → InputBox2
  39. ImplicitCurve(g(x, y) - z0) → p1
  40. ImplicitCurve(g(x, y) - u(x, y)) → pp
  41. Textfield(u) → InputBox4
  42. ImplicitCurve(u(x, y) - z0) → p2
  43. IntersectPath(o, g(x, y)) → s1
  44. IntersectPath(o, u(x, y)) → s2