Catmull–Clark subdivision surface: Difference between revisions

Content added Content deleted
m (J: use temporary variables for intermediate results)
Line 148: Line 148:
point_face=. |: mesh havePoints points
point_face=. |: mesh havePoints points
avg_face_points=. point_face avg@#"1 2 face_point
avg_face_points=. point_face avg@#"1 2 face_point
edges=. ~.,/meshEdges=:mesh /:~@,"+1|."1 mesh
edges=. ~.,/ meshEdges=. mesh /:~@,"+1|."1 mesh
edge_face=. *./"2 edges e."0 1/ mesh
edge_face=. *./"2 edges e."0 1/ mesh
edge_center=. avg"2 edges{points
edge_center=. avg"2 edges{points
Line 158: Line 158:
new_coords=. (m1 * points) + (m2 * avg_face_points) + (m3 * avg_mid_edges)
new_coords=. (m1 * points) + (m2 * avg_face_points) + (m3 * avg_mid_edges)
pts=. face_point,edge_point,new_coords
pts=. face_point,edge_point,new_coords
c0=. (#edge_point)+e0=:#face_point
c0=. (#edge_point)+ e0=. #face_point
msh=. (,c0+mesh),.(,e0+edge i. meshEdges),.((#i.)~/$mesh),.,e0+_1|."1 edge i. meshEdges
msh=. (,c0+mesh),.(,e0+edge i. meshEdges),.((#i.)~/$mesh),.,e0+_1|."1 edge i. meshEdges
msh;pts
msh;pts
Line 167: Line 167:
<lang j>NB.cube
<lang j>NB.cube
points=: _1+2*#:i.8
points=: _1+2*#:i.8
mesh=:1 A."1 I.(,1-|.)8&$@#&0 1">4 2 1
mesh=: 1 A."1 I.(,1-|.)8&$@#&0 1">4 2 1


catmullclark mesh;points
catmullclark mesh;points