隐函数曲线的交点:扫描法改进版
几何画板及绘图内容加载中,请稍等……
所属专题
intersection: surface-surface, curve-curve
intersection: surface-surface, curve-curve
intersection: surface-surface, curve-curve
intersection: surface-surface, curve-curve
本示例展示了如何使用改进的扫描方法求解两个隐函数曲线的交点。通过设置 x 和 y 的范围滑块,系统地扫描整个平面网格,计算每对点在两个隐函数下的值,当符号发生变化时,利用根查找技术识别潜在的交点,并最终得到精确的交点坐标。核心数学概念包括隐函数、坐标几何、符号变化检测以及数值根求解方法。GeoGebra 构造中使用了 ImplicitCurve 对象 生成曲线,If 和 RemoveUndefined 用于条件判断,Zip、TableText、Join 等命令实现数据处理,Unique 和 Element 确保结果的唯一性和提取,Polygon、Tool2b、Length 等工具辅助几何可视化。该示例适合高中或大学一、二年级的学生使用,尤其适用于解析几何、数值方法或计算数学课程中关于曲线交点问题的教学与探究。
GeoGebra 命令及参数
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