The catmull-clark surface subdivision algorithm is an issue I have
been neglecting for a few years:
avg=: +/ % #
havePoints=: e."1/~ i.@#
catmullclark=:3 :0
'mesh points'=. y
face_point=. avg"2 mesh{points
point_face=. |: mesh havePoints points
avg_face_points=. point_face avg@#"1 2 face_point
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
avg_mid_edges=. point_edge avg@#"1 2 edge_center
n=. +/"1 point_edge
'm3 m2 m1'=. (2,1,:n-3)%"1 n
new_coords=. (m1 * points) + (m2 * avg_face_points) + (m3 * avg_mid_edges)
pts=. face_point,edge_point,new_coords
c0=. (#edge_point)+ e0=. #face_point
msh=. (,c0+mesh),.(,e0+edges i.
meshEdges),.((#i.)~/$mesh),.,e0+_1|."1 edges i. meshEdges
msh;pts
)
Example use: subdividing a cube:
points=: _1+2*#:i.8
mesh=: 1 A."1 I.(,1-|.)8&$@#&0 1">4 2 1
catmullclark mesh;points
This all is straight out of the rosettacode implementation
https://rosettacode.org/wiki/Catmull–Clark_subdivision_surface#J
Now..., reading Ed Catmull's papers (which used to be easy to find
downloadable copies of - catmull had a few websites which are probably
still up, but no longer seem to be findable using search. Now I am
getting 404 results from some of the more plausible seeming leads that
I can find using search, other than
http://dl.acm.org/citation.cfm?id=907242), the underlying concept has
to do with a useful analogy between eigenvectors, b-splines and
geometric normals. Sadly, though, I was never able to reproduce his
results following that line of thought - which probably means I lack
some relevant math background.
So, my question here, is: what kinds of classes am I likely to need to
take, to reproduce Catmull's thesis work?
I understand that this is an ill-formed question, so maybe a fallback
question would be: where would I find out about math / computer
science topics at University of Utah professors and curriculum in the
early '70s? Who would I talk to, I suppose might ask?
Thanks,
--
Raul
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm