Hi,
I have read some papers related to NURBS surface-surface intersection in these
two days, and two approaches came to mind:
(1) Using subdivision methods:
This approach decompose the two surfaces into small parts, like surface
triangulation or small bounding boxes. Then the intersection of those small
parts are calculated. Papers below describe these algorithms in detail:
http://www.idav.ucdavis.edu/publications/print_pub?pub_id=80
http://dl.acm.org/citation.cfm?id=1364937
It seems that subdivision methods are comparatively easier to implement, but I
wonder whether its performance and accuracy is good enough.
(2) Using marching methods:
This approach usually achieves good performance, but *lots of math* is needed.
A lot of research is on this topic, and there are many different detailed
implementations of it. The outline of this algorithm can be seen at:
http://www.cs.berkeley.edu/~hling/research/paper/intersection.htm
And there are also other papers discussing the marching algorithm:
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.181
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.114.5358
http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=180122
All of them have different implementations, but the main steps (the framework)
of the algorithms are similar.
I look a litter deeper into the marching algorithm on how to implement it, and
meet some difficulties. Even after reading several papers to find the answer I
want, I still cannot come out with a complete solution of the first step, which
is to calculate the starting point on the intersection curve using
curve-surface intersection!
So this method may be really HARD, although it seems to have good results.
Could someone please give your opinion on this two approaches? Or other good
suggestions?
And I looked into the openNURBS API used by BRL-CAD. It does have some
interfaces (functions), which is designed to use for calculating
curve-curve/curve-surface or even surface/surface intersections, but it does
not have an implementation, and says: "The working function is part of the
Rhino SDK." It means that we must implement it by ourselves?
Besides, I found that there is some code in brep.cpp dealing with the ray trace
of NURBS objects. There are functions related to intersections, which are used
to intersect a ray with a NURBS object, so I think they can offer some help in
this surface-surface intersection project. But there isn't any documentation
nor comment explaining these functions, so could someone please tell me briefly
what they really do and how to use it? Thanks a lot.
Cheers!
Wu
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
BRL-CAD Developer mailing list
brlcad-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-devel