Intersection Points of Two Implicit Curves: Improved Scanning Method
Loading the math board and drawing, please wait…
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
If((tt < -1.2) ∨ (tt > -0.7), tt, -0.75) → tTextfield(Nn) → InputBox4Textfield(e) → InputBox5Textfield(x_{min}) → InputBox6Textfield(x_{max}) → InputBox7Textfield(y_{min}) → InputBox8Textfield(y_{max}) → InputBox9RemoveUndefined(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]]) → RootsxyRemoveUndefined(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]]) → RootsyxRemoveUndefined(KeepIf[abs(f2(x(A), y(A))) ≤ e, A, Rootsxy]) → listxy_0RemoveUndefined(KeepIf[abs(f2(y(A), x(A))) ≤ e, A, Rootsyx]) → listyx_0Zip((x(a), y(a)), a, listxy_0) → listxya_0Zip((y(a), x(a)), a, listyx_0) → listyxa_0TableText({Join[{{"Roots_{yx}"}, listyxa_0}]}, "vr") → text34TableText({Join[{{"Roots_{xy}"}, listxya_0}]}, "vr") → text23Textfield(α) → InputBox2ImplicitCurve(f1(x, y)) → aImplicitCurve(f2(x, y)) → bImplicitCurve(f01(x, y)) → cPolygon((x_{min}, y_{min}), (x_{max}, y_{min}), (x_{max}, y_{max}), (x_{min}, y_{max})) → poly1, f_1, g, h, iTextfield(f1) → InputBox1Textfield(f2) → InputBox3RemoveUndefined(Zip[(x(a), y(a)), a, Join[{listxya_0, listyxa_0}]]) → listxyres0Tool2b(listxyres0, r) → listxyres1Length(listxyres0) → lä0Length(listxyres1) → lä1Join(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]]) → listxyres2Length(listxyres2) → lä2Unique(listxyres2) → listxyres2aLength(listxyres2a) → lä2aTextfield(tt) → InputBox10Textfield(r) → InputBox11TableText({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") → text10Element(listxyres2a, f) → A