Catmull–Clark subdivision surface: Difference between revisions

Content added Content deleted
(J: partial bugfix)
Line 45: Line 45:
=={{header|J}}==
=={{header|J}}==


FIXME: result points do not correspond to sample data on talk page (I have factors of 3/4 where sample has 2/3).
FIXME: edge_point is defined incorrectly.


<lang j>havePoints=: e."1/~ i.@#
<lang j>havePoints=: e."1/~ i.@#
Line 54: Line 54:
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_point=: avg"2 edges{points
edge_face=: *./"2 edges e."0 1/ mesh
edge_center=: avg"2 edges{points
edge_point=: (0.5*edge_center) + 0.25 * edge_face +/ .* face_point
point_edge=: |: edges havePoints points
point_edge=: |: edges havePoints points
avg_mid_edges=: point_edge avg@#"1 2 edge_point
avg_mid_edges=: point_edge avg@#"1 2 edge_center
n=: +/"1 point_edge
n=: +/"1 point_edge
'm3 m2 m1'=:(2,1,:n-3)%"1 n
'm3 m2 m1'=:(2,1,:n-3)%"1 n
Line 80: Line 82:
│20 10 1 12│ 0 _1 0│
│20 10 1 12│ 0 _1 0│
│21 11 1 10│ _1 0 0│
│21 11 1 10│ _1 0 0│
│25 8 1 11│ 1 _1 0│
│25 8 1 11│ 0.75 _0.75 0│
│24 12 1 8│ 1 0 1│
│24 12 1 8│ 0.75 0 0.75│
│19 13 2 14│ 1 1 0│
│19 13 2 14│ 0.75 0.75 0│
│21 11 2 13│ 1 0 _1│
│21 11 2 13│ 0.75 0 _0.75│
│25 7 2 11│ _1 1 0│
│25 7 2 11│ _0.75 0.75 0│
│23 14 2 7│ 0 1 1│
│23 14 2 7│ 0 0.75 0.75│
│18 15 3 16│ 0 1 _1│
│18 15 3 16│ 0 0.75 _0.75│
│20 12 3 15│ _1 0 1│
│20 12 3 15│ _0.75 0 0.75│
│24 9 3 12│ 0 _1 1│
│24 9 3 12│ 0 _0.75 0.75│
│22 16 3 9│ _1 0 _1│
│22 16 3 9│ _0.75 0 _0.75│
│18 17 4 16│ 0 _1 _1│
│18 17 4 16│ 0 _0.75 _0.75│
│19 14 4 17│ _1 _1 0│
│19 14 4 17│ _0.75 _0.75 0│
│23 6 4 14│_0.555556 _0.555556 _0.555556│
│23 6 4 14│_0.555556 _0.555556 _0.555556│
│22 16 4 6│_0.555556 _0.555556 0.555556│
│22 16 4 6│_0.555556 _0.555556 0.555556│