完美法式台球:向量的魔法
几何画板及绘图内容加载中,请稍等……
本范例通过动态几何演示了法式台球(无袋台球)中球的完美反弹路径,直观展示了向量在反射与平移中的核心作用。核心数学概念包括向量运算、反射定律、平移变换以及多边形面积与路径的优化问题。作图要点:使用GeoGebra的Segment、Line、OrthogonalLine、Intersect等命令构造台球桌边界与反弹点,通过Vector、Translate实现球的平移与反射,利用If、Circle、Polygon、Ray等对象构建动态轨迹与辅助图形,并借助滑块控制入射角度与位置。适合高中及以上学段学习向量、几何变换与最优化问题,也可用于物理中碰撞反射的直观教学。
GeoGebra 命令及参数
Segment(A, B) → fLine(C, f) → g1OrthogonalLine(A, g1) → i1Line(D, g1) → h1Intersect(h1, i1) → ABCD1Vector(D, ABCD1) → abcd1OrthogonalLine(B, h1) → j1Intersect(g1, j1) → ABCD2Translate(ABCD2, Vector[(-abcd1)]) → ABCD2'Segment(F, B) → hLine(E, h) → i3Line(C, i3) → j3OrthogonalLine(F, j3) → n3Intersect(i3, n3) → BCEF1Vector(E, BCEF1) → bcef1OrthogonalLine(B, i3) → m3Intersect(j3, m3) → BCEF2Translate(BCEF2, Vector[(-bcef1)]) → BCEF2'If(f < (2 * r), ABCD2', If[h < (2 * r), BCEF2', C]) → C1Vector(C, BCEF2) → bcef2Translate(BCEF1, Vector[(-bcef2)]) → BCEF1'Segment(A, F) → gLine(E, g) → h2Line(D, h2) → i2OrthogonalLine(A, i2) → m2Intersect(i2, m2) → ADEF2Vector(D, ADEF2) → adef2OrthogonalLine(F, h2) → j2Intersect(h2, j2) → ADEF1Translate(ADEF1, Vector[(-adef2)]) → ADEF1'Vector(E, ADEF1) → adef1Translate(ADEF2, Vector[(-adef1)]) → ADEF2'Vector(C, ABCD2) → abcd2Translate(ABCD1, Vector[(-abcd2)]) → ABCD1'If(f < (2 * r), ABCD1', If[g < (2 * r), ADEF2', D]) → D1Translate(C1, cb) → C2Translate(D1, da) → D2Translate(B, cb) → B2Translate(A, da) → A2If(x(B2) < 0, (-x(B2)), If[x(B2) > Lx, (2 * Lx) - x(B2), x(B2)]) → xBIf(x(B2) < 0, (-x(C2)), If[x(B2) > Lx, (2 * Lx) - x(C2), x(C2)]) → xCIf(x(A2) < 0, (-x(D2)), If[x(A2) > Lx, (2 * Lx) - x(D2), x(D2)]) → xDIf(y(B2) < 0, (-y(C2)), If[y(B2) > Ly, (2 * Ly) - y(C2), y(C2)]) → yCIf(y(A2) < 0, (-y(D2)), If[y(A2) > Ly, (2 * Ly) - y(D2), y(D2)]) → yDCircle(A3, r) → cCircle(B3, r) → dSegment(D3, A3) → kIf(g ≤ (2 * r), ADEF1', If[h < (2 * r), BCEF1', E]) → E1Segment(C3, B3) → lTranslate(F, ef) → F2Translate(E1, ef) → E2If(x(F2) < 0, (-x(E2)), If[x(F2) > Lx, (2 * Lx) - x(E2), x(E2)]) → xEIf(y(F2) < 0, (-y(E2)), If[y(F2) > Ly, (2 * Ly) - y(E2), y(E2)]) → yECircle(F3, r) → eSegment(E3, F3) → iIntersect(m, n) → GIntersect(j, m) → HIntersect(j, p) → IIntersect(n, p) → JPolygon(G, H, I, J) → q1, p4, p3, p1, p2If(y(B2) < 0, (-y(B2)), If[y(B2) > Ly, (2 * Ly) - y(B2), y(B2)]) → yBIf(y(A2) < 0, (-y(A2)), If[y(A2) > Ly, (2 * Ly) - y(A2), y(A2)]) → yAIf(x(F2) < 0, (-x(F2)), If[x(F2) > Lx, (2 * Lx) - x(F2), x(F2)]) → xFIf(x(A2) < 0, (-x(A2)), If[x(A2) > Lx, (2 * Lx) - x(A2), x(A2)]) → xAIf(y(F2) < 0, (-y(F2)), If[y(F2) > Ly, (2 * Ly) - y(F2), y(F2)]) → yFRay(D3, A3) → q