码迷,mamicode.com
首页 > 其他好文 > 详细

重心座标插值(Barycentric Interpolation)

时间:2015-05-28 21:33:05      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:三维

提要

       重心座标插值在图形学领域有着很重要的应用,比如Ray Tracing算法的ray - triangle intersection 检测,比如有限元模拟中的模型简化等。


一维情况

      从最简单的开始,一个线段:

技术分享

如何表示p点的值?

可以这样想,p总是在x1和x2之间徘徊,不知道如何选择,蓝色线段的长度t表示p对x2的喜爱程度,红色线段(1-t)表示对x1的喜爱程度。

那么P点的值就可以表示为

  技术分享 .


二维情况

二维情况下就是三角形了。

技术分享


求点p的值。

二维情况下就应该联想到面积。想法类似,如下图:

技术分享

蓝色三角形面积A3表示p喜爱蓝色点的程度,绿色三角形和红色三角形同理。


那么p点的座标就可以表示为:

技术分享

令 u = A1/A ,v = A2/A, w = A3/A

则式子可以化为 

ux1 + vx2 + wx3.

其中 u+v+w=1.


求三角形面积

已知三角形三个顶点的座标值,求三角形面积。如下图

技术分享

首先求平行四边形的面试,用到的是向量的点乘。

Parallelogramarea= ||(B?A)×(C?A)||Trianglearea=Parallelogramarea2Parallelogramarea= ||(B?A)×(C?A)||Trianglearea=Parallelogramarea2Parallelogramarea= ||(B?A)×(C?A)||Trianglearea=Parallelogramarea2Parallelogramarea= ||(B?A)×(C?A)||Trianglearea=Parallelogramarea2Parallelogramarea= ||(B?A)×(C?A)||


三角形面积除以2就可以了。

Trianglearea=||(B?A)||?||(C?A)||sin(θ)2


三维情况

三维1情况对应的就是四面体( Tetrahedron)了。如下图,还是求P点的值。

技术分享

也许大家第一想到的是体积是这样的,计算每个小四面体的体积,然后和最大的四面体体积相比,得到对应的比例,原理是这样的,但是有更加简单的方法!

首先定义点到平面的有向距离为:D(p , PLabc),其中p、a、b、c均为空间上的点,而PL是由a、b、c三个点所构成的平面,那么对于上图分布的一个四面体以及另外的任意一个点P,可得该点的重心坐标为:

技术分享

其中的技术分享技术分享技术分享技术分享分别是P点相对于a,b,c,d点的权重,而且有技术分享+技术分享+技术分享+技术分享= 1

p = a * 技术分享 + b * 技术分享+c * 技术分享+d * 技术分享=a +(b-a)技术分享 + (c-a)技术分享 + (d-a)技术分享

有了重心坐标之后就可以使用其来判断P点与该四面体间的关系:

  • 如果技术分享技术分享技术分享技术分享均属于[0,1],那么P点位于该四面体的内部。
  • 如果其中某一项不在此范围内,还可以根据其越域方式来判断P点在四面体外的分布情况:比如技术分享小于0,那么P点就处于bcd所对应的平面之下(此处用a点来参考平面的上下);反之,若其大小1,那么P点就处于过P点且平行于bcd平面的平面之上。


参考

Barycentric Coordinates - http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/barycentric-coordinates/

Barycentric Coordinates of Tetrahedron  - http://blog.csdn.net/bugrunner/article/details/7423727






重心座标插值(Barycentric Interpolation)

标签:三维

原文地址:http://blog.csdn.net/silangquan/article/details/21990713

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!