Frenet–Serret Ribbons Triangulation

Frenet–Serret Ribbons Triangulation
Loading the math board and drawing, please wait…
2020-11-03 05:30
This example demonstrates how to generate dynamic ribbon-like surfaces around a 3D space curve using the Frenet–Serret frame (tangent, normal, binormal), and how to replace slow surface definitions with fast triangulation for real-time visualization. The core mathematical concepts include curvature κ, torsion τ, the Frenet–Serret formulas, vector differentiation, and orthogonal moving frames. Construction highlights: the curve is defined via CurveCartesian, derivatives are computed with Derivative, frame vectors are built using Vector, and Zip/Sequence commands batch-generate triangulation points. Interactive controls include Textfield and InputBox for parameters (rotation angles Rx/Ry/Rz, parameter range min/max, number of ribbons), plus sliders for animation. This is suitable for university-level differential geometry, computer graphics, or mathematical modeling courses, and also serves as an advanced enrichment for high school students to intuitively grasp local geometric properties of space curves and discrete surface meshing.

GeoGebra Commands & Parameters

  1. Textfield(min) → InputBoxmin
  2. Textfield(max) → InputBoxmax
  3. Textfield(Rx) → InputBoxRx
  4. Textfield(Ry) → InputBoxRy
  5. Textfield(Rz) → InputBoxRz
  6. CurveCartesian((Rx(t), Ry(t), Rz(t)), t, 0, (2 * π)) → R
  7. Derivative(R, 1) → V
  8. Derivative(R, 2) → A
  9. Derivative(R, 3) → J
  10. CurveCartesian(R(t), t, min, max) → c
  11. CurveCartesian(V(t) / LV(t), t, 0, (2 * π)) → T
  12. CurveCartesian(V(t) ⊗ A(t), t, 0, (2 * π)) → VxA
  13. CurveCartesian(VxA(t) / LVxA(t), t, 0, (2 * π)) → B
  14. CurveCartesian(B(t) ⊗ T(t), t, 0, (2 * π)) → N
  15. Vector(Pc, Pc + PT) → vT
  16. Vector(Pc, Pc + PN) → vN
  17. Vector(Pc, Pc + PB) → vB
  18. LaTeX(κ, true, true) → textκ
  19. LaTeX(τ, true, true) → textτ
  20. Zip(R(t), t, Lt) → LR
  21. Zip(R(t) - N(t) / 5, t, Lt + ts / 2) → LNm
  22. Zip(R(t) + N(t) / 5, t, Lt + ts / 2) → LNp
  23. Sequence(Polygon[{Element[LR, k], Element[LR, k + 1], Element[LNp, k]}], k, 1, n) → LN1
  24. Sequence(Polygon[{Element[LR, k], Element[LR, k + 1], Element[LNm, k]}], k, 1, n) → LN2
  25. Sequence(Polygon[{Element[LNp, k], Element[LR, k + 1], Element[LNp, k + 1]}], k, 1, n) → LN3
  26. Sequence(Polygon[{Element[LNm, k], Element[LR, k + 1], Element[LNm, k + 1]}], k, 1, n) → LN4
  27. Zip(R(t) - B(t) / 5, t, Lt + ts / 2) → LBm
  28. Zip(R(t) + B(t) / 5, t, Lt + ts / 2) → LBp
  29. Sequence(Polygon[{Element[LR, k], Element[LR, k + 1], Element[LBp, k]}], k, 1, n) → LB1
  30. Sequence(Polygon[{Element[LR, k], Element[LR, k + 1], Element[LBm, k]}], k, 1, n) → LB2
  31. Sequence(Polygon[{Element[LBp, k], Element[LR, k + 1], Element[LBp, k + 1]}], k, 1, n) → LB3
  32. Sequence(Polygon[{Element[LBm, k], Element[LR, k + 1], Element[LBm, k + 1]}], k, 1, n) → LB4

AI Drawing Prompt Reference

Draw a 3D parametric space curve defined by user-adjustable components and a configurable parameter interval. Compute its first, second, and third derivatives to build the Frenet–Serret moving frame: the unit tangent, normal, and binormal directions. Sample the curve at evenly spaced parameter values, and for each sample create offset points in the orthogonal directions corresponding to tangent–normal and tangent–binormal combinations. Connect triplets of neighboring samples into triangular faces to form several ribbon-like triangulated surfaces wrapping the curve continuously along the parameter direction. Provide controls via parameters and sliders for rotation angles, min/max range, and ribbon/mesh resolution.
The prompt above was compiled from the original drawing commands and is for reference only.