计算两曲面交点
几何画板及绘图内容加载中,请稍等……
所属专题
intersection: surface-surface, curve-curve
intersection: surface-surface, curve-curve
intersection: surface-surface, curve-curve
intersection: surface-surface, curve-curve
My 3D Collection
本范例演示了如何计算两个显式曲面的交点。涉及的核心数学概念包括解析几何和立体几何。作图要点包括使用 GeoGebra 命令如 Function, If, Polygon, PointIn, Segment, Textfield, Point, Sum, Zip, Length, Sequence, RemoveUndefined, Append, PolyLine, ImplicitCurve, IntersectPath 等对象。适合高中及以上学生学习和探索曲面交点问题。
GeoGebra 命令及参数
Function(f(a, b), a, x_{min} - 0.2, x_{max} + 0.2, b, y_{min} - 0.2, y_{max} + 0.2) → gIf(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) → lb1If(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]) → P2yyxIf(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]) → P1xxyPolygon((x_{min}, y_{min}), (x_{max}, y_{min}), (x_{max}, y_{max}), (x_{min}, y_{max})) → poly1, b, c, d, ePointIn(poly1) → PTestSegment(B02, B01) → aTextfield(v_1) → inputBox2Textfield(f) → inputBox3Textfield(x_{min}) → inputBox4Textfield(x_{max}) → inputBox5Textfield(y_{max}) → inputBox6Textfield(z_{max}) → inputBox7Textfield(y_{min}) → inputBox8Textfield(z_{min}) → inputBox9Point(a, 1 - zzii_B) → ATextfield(N_P) → inputBox10Sum(Sequence[If[f(x(PTest), y(PTest)) - f(x(Element[lr01, i]), y(Element[lr01, i])) > 0, 1, 0], i, 1, n]) → ext1Zip((x(a), y(a), g(x(a), y(a))), a, Join[{P1xxy, P2yyx}]) → list1Length(list1) → LäTextfield(step) → inputBox12Textfield(zoom_{3D}) → InputBox1Sequence((x(Element[lr01, i]), y(Element[lr01, i]), f(x(Element[lr01, i]), y(Element[lr01, i]))), i, 1, n) → lr013Sequence((x(Element[lr02, i]), y(Element[lr02, i]), f(x(Element[lr02, i]), y(Element[lr02, i]))), i, 1, n) → lr023RemoveUndefined(Sequence[If[f(x(PTest), y(PTest)) - f(x(Element[lr01, i]), y(Element[lr01, i])) > 0, i, NaN], i, 1, n]) → lr04Zip(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]]) → lr06Zip(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]]) → lr063Zip(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]]) → lr07Zip(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]]) → lr073RemoveUndefined(Sequence[If[f(x(PTest), y(PTest)) - f(x(Element[lr01, i]), y(Element[lr01, i])) > 0, i, (-i)], i, 1, n]) → lr04cAppend(lr04c, Element[lr04c, 1]) → lr04ccSum(Sequence[If[(Element[lr04cc, i] * Element[lr04cc, i + 1]) < 0, 1, 0], i, 1, n + 1]) → lr04cccIf(ext1 ≟ n, "Max", If[ext1 ≟ 0, "Min", If[(lr04ccc > 2) ∧ (lr04ccc ≤ 4), "saddle ? ", "?"]]) → TT1PolyLine({(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)}) → RoPolyLine({(0, 0), (0.2, 0), (0.3, 0.6), (0.4, 1), (0.7, 1), (0.9, 0.2), (1, 0)}) → GrPolyLine({(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)}) → BlPoint(Pxy) → DTextfield(z0) → InputBox2ImplicitCurve(g(x, y) - z0) → p1ImplicitCurve(g(x, y) - u(x, y)) → ppTextfield(u) → InputBox4ImplicitCurve(u(x, y) - z0) → p2IntersectPath(o, g(x, y)) → s1IntersectPath(o, u(x, y)) → s2