Catmull–Clark subdivision surface: Difference between revisions
Content added Content deleted
m (→{{header|J}}) |
(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_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 |
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│ |
│25 8 1 11│ 0.75 _0.75 0│ |
||
│24 12 1 8│ |
│24 12 1 8│ 0.75 0 0.75│ |
||
│19 13 2 14│ |
│19 13 2 14│ 0.75 0.75 0│ |
||
│21 11 2 13│ |
│21 11 2 13│ 0.75 0 _0.75│ |
||
│25 7 2 11│ |
│25 7 2 11│ _0.75 0.75 0│ |
||
│23 14 2 7│ 0 |
│23 14 2 7│ 0 0.75 0.75│ |
||
│18 15 3 16│ 0 |
│18 15 3 16│ 0 0.75 _0.75│ |
||
│20 12 3 15│ |
│20 12 3 15│ _0.75 0 0.75│ |
||
│24 9 3 12│ 0 |
│24 9 3 12│ 0 _0.75 0.75│ |
||
│22 16 3 9│ |
│22 16 3 9│ _0.75 0 _0.75│ |
||
│18 17 4 16│ 0 |
│18 17 4 16│ 0 _0.75 _0.75│ |
||
│19 14 4 17│ |
│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│ |