packages feed

egison-5.0.0: sample/math/geometry/surface.egi

-- Surface Geometry: First and Second Fundamental Forms

declare symbol x, y, f

def v1 := [|1, 0, ∂/∂ (f x y) x|]
def v2 := [|0, 1, ∂/∂ (f x y) y|]

assertEqual "tangent vector v1"
  v1
  [| 1, 0, f|1 x y |]

assertEqual "tangent vector v2"
  v2
  [| 0, 1, f|2 x y |]

def v3 := crossProduct v1 v2

assertEqual "normal vector (cross product)"
  v3
  [| - f|1 x y, - f|2 x y, 1 |]

def e3 := v3 / sqrt '(V.* v3 v3)

-- Unit normal vector
assertEqual "unit normal vector e3"
  e3
  [| - f|1 x y / sqrt ((f|1 x y)^2 + (f|2 x y)^2 + 1), - f|2 x y / sqrt ((f|1 x y)^2 + (f|2 x y)^2 + 1), 1 / sqrt ((f|1 x y)^2 + (f|2 x y)^2 + 1) |]

-- First fundamental form coefficients
def E := V.* v1 v1
def F := V.* v1 v2
def G := V.* v2 v2

assertEqual "E (first fundamental form)"
  E
  (1 + (f|1 x y)^2)

assertEqual "F (first fundamental form)"
  F
  (f|1 x y * f|2 x y)

assertEqual "G (first fundamental form)"
  G
  (1 + (f|2 x y)^2)

-- Second fundamental form coefficients
def L := V.* (∂/∂ v1 x) e3
def M := V.* (∂/∂ v1 y) e3
def N := V.* (∂/∂ v2 y) e3

assertEqual "L (second fundamental form)"
  L
  (f|1|1 x y / sqrt ((f|1 x y)^2 + (f|2 x y)^2 + 1))

assertEqual "M (second fundamental form)"
  M
  (f|1|2 x y / sqrt ((f|1 x y)^2 + (f|2 x y)^2 + 1))

assertEqual "N (second fundamental form)"
  N
  (f|2|2 x y / sqrt ((f|1 x y)^2 + (f|2 x y)^2 + 1))

-- Gaussian curvature K and mean curvature H
def K := (L * N - M ^ 2) / '(E * G - F ^ 2)
def H := ('E * N + 'G * L + (-2) * F * M) / 2 * '(E * G - F ^ 2)

-- The formulas for K and H involve complex expressions with partial derivatives
-- They represent the Gaussian and mean curvatures of the surface z = f(x, y)