Intersection Points of Two Implicit Curves: Improved Scanning Method

Intersection Points of Two Implicit Curves: Improved Scanning Method
Loading the math board and drawing, please wait…
2016-12-04 22:06
This example demonstrates an improved scanning method for finding the intersection points of two implicit curves. By adjusting sliders for the x and y ranges, the system scans the plane grid, evaluating the implicit functions at each point. When a sign change is detected, a root‑finding technique identifies candidate intersections, which are then refined to precise coordinates. The core mathematics involve implicit functions, coordinate geometry, sign‑change detection, and numerical root solving. The GeoGebra construction uses ImplicitCurve objects, conditional statements (If), data handling commands (Zip, TableText, Join), and utilities (RemoveUndefined, Unique, Element) to process and extract results, while Polygon, Tool2b, and Length support geometric visualization. It is suitable for high‑school or early‑undergraduate students in courses covering analytic geometry, numerical methods, or computational mathematics.

GeoGebra Commands & Parameters

  1. If((tt < -1.2) ∨ (tt > -0.7), tt, -0.75) → t
  2. Textfield(Nn) → InputBox4
  3. Textfield(e) → InputBox5
  4. Textfield(x_{min}) → InputBox6
  5. Textfield(x_{max}) → InputBox7
  6. Textfield(y_{min}) → InputBox8
  7. Textfield(y_{max}) → InputBox9
  8. RemoveUndefined(Join[Sequence[Zip[a + (0, y_{min} + (dy2 * (s0 - 1))), a, {Roots[f01(x, y_{min} + (dy2 * (s0 - 1))), x_{min}, x_{max}]}], s0, 1, Nn + 1]]) → Rootsxy
  9. RemoveUndefined(Join[Sequence[Zip[a + (0, x_{min} + (dx2 * (s0 - 1))), a, {Roots[f01(x_{min} + (dx2 * (s0 - 1)), x), y_{min}, y_{max}]}], s0, 1, Nn + 1]]) → Rootsyx
  10. RemoveUndefined(KeepIf[abs(f2(x(A), y(A))) ≤ e, A, Rootsxy]) → listxy_0
  11. RemoveUndefined(KeepIf[abs(f2(y(A), x(A))) ≤ e, A, Rootsyx]) → listyx_0
  12. Zip((x(a), y(a)), a, listxy_0) → listxya_0
  13. Zip((y(a), x(a)), a, listyx_0) → listyxa_0
  14. TableText({Join[{{"Roots_{yx}"}, listyxa_0}]}, "vr") → text34
  15. TableText({Join[{{"Roots_{xy}"}, listxya_0}]}, "vr") → text23
  16. Textfield(α) → InputBox2
  17. ImplicitCurve(f1(x, y)) → a
  18. ImplicitCurve(f2(x, y)) → b
  19. ImplicitCurve(f01(x, y)) → c
  20. Polygon((x_{min}, y_{min}), (x_{max}, y_{min}), (x_{max}, y_{max}), (x_{min}, y_{max})) → poly1, f_1, g, h, i
  21. Textfield(f1) → InputBox1
  22. Textfield(f2) → InputBox3
  23. RemoveUndefined(Zip[(x(a), y(a)), a, Join[{listxya_0, listyxa_0}]]) → listxyres0
  24. Tool2b(listxyres0, r) → listxyres1
  25. Length(listxyres0) → lä0
  26. Length(listxyres1) → lä1
  27. Join(Sequence[First[Sort[Element[listxyres1, i], Zip[Length[(f1(x(a), y(a)), f2(x(a), y(a)))], a, Element[listxyres1, i]]]], i, 1, Length[listxyres1]]) → listxyres2
  28. Length(listxyres2) → lä2
  29. Unique(listxyres2) → listxyres2a
  30. Length(listxyres2a) → lä2a
  31. Textfield(tt) → InputBox10
  32. Textfield(r) → InputBox11
  33. TableText({Join[{{"N"}, Sequence[i, i, 1, lä2a]}], Join[{{"N"}, Sequence["→", i, 1, f]}], Join[{{" x:"}, x(listxyres2a)}], Join[{{" y:"}, y(listxyres2a)}], Join[{{"f1*10^-6"}, lf1_{Pr}2}], Join[{{"f2* 10^-6"}, lf2_{Pr}2}]}, "vr") → text10
  34. Element(listxyres2a, f) → A