サブディビジョンサーフェスとNURBS
私自身、このパターンをどう応用するのかについて、いや、もう基本的な意味合いすらわかりません。ですが、幾何学を取り込んだプログラミング言語のくせに3Dモデリングが内包されていないなんて、変だろ。というわけで。無理くりねじこんでみました。
これでのデモがおもいついたら、また、クラウドのアーティファクト貼り付けます。
どうなるかはわかりませんが。
space GeometricSurfaces {
properties {
continuous: Topology<Boolean> = true
differentiable: Topology<Boolean> = true
}
shape SubdivisionSurface<T> {
properties {
control_points: Collection<Point<T>>
subdivision_level: Number
boundary_conditions: Collection<Constraint>
}
mapping subdivide() {
properties {
topology_preserving: Boolean = true
smooth: Boolean = true
}
path {
verify_mesh_topology ->
compute_new_vertices ->
update_connectivity ->
smooth_surface ->
verify_continuity
}
}
mapping evaluate_point(u: Number, v: Number) {
properties {
continuous: Boolean = true
}
path {
locate_patch ->
compute_basis_functions ->
blend_control_points ->
return_surface_point
}
}
}
shape NURBSSurface<T> {
properties {
control_points: Collection<Point<T>>
weights: Collection<Number>
knot_vectors: Collection<Collection<Number>>
degree: Collection<Number>
}
mapping evaluate() {
properties {
rational: Boolean = true
continuous: Boolean = true
}
path {
compute_basis_functions ->
apply_weights ->
blend_control_points ->
normalize_rational ->
verify_continuity
}
}
mapping refine() {
properties {
topology_preserving: Boolean = true
}
path {
insert_knots ->
update_control_points ->
maintain_shape ->
verify_parametrization
}
}
}
// Common operations for both surface types
mapping transform<S: Surface>() {
properties {
continuous: Boolean = true
invertible: Boolean = true
}
path {
validate_transform ->
apply_to_control_points ->
maintain_weights ->
preserve_parameterization ->
verify_topology
}
}
}