概述
线性插值
![f7236b39acd3d89899cc18addea3db28.png](https://file2.kaopuke.com:8081/files_image/2023062421/f7236b39acd3d89899cc18addea3db28.png)
令:
得到:
double lerp(double t, double y1,double y2){
return (1-t)*y1+t*y2;
}
另外,根据式
这与式
double getT(double y, double y1,double y2){
return (y-y1)/(y2-y1);
}
三角形五心(复习几何知识)
重心:三条中线交点,重心分中线比例1:2
垂心:三条高交点
内心:三条角平分线交点,内切圆圆心
外心:三边垂直平分线交点,外接圆圆心
旁心:一个内角平分线,两个外角平分线的交点,三角形有三个旁心,旁心对应旁切圆
中心:正三角形,垂心、重心、内心、外心是一个点,称为中心,此时没有旁心
![e4693768104bda553390f985db4de1c5.png](https://file2.kaopuke.com:8081/files_image/2023062421/e4693768104bda553390f985db4de1c5.png)
重心坐标(Barycentric coordinates)
概念
![d8e0cf3cc41dfcce466eb5615849f77d.png](https://file2.kaopuke.com:8081/files_image/2023062421/d8e0cf3cc41dfcce466eb5615849f77d.png)
空间中任意一点
此时,
证明: (1)若是平面上任意一点,
是平面上的向量,所以
(2)已知
![]()
证毕.
所以,换言之,不满足的点都在平面外,平面外的点都不满足该条件
如果要限制在三角形
内部,需要令
如果某个系数等于或
,则此时
在边界上; 如果某个系数在
外部,则
在三角形
外部 这组系数
可以很好的描述三角形内部任意一点,被称为重心坐标
求解重心坐标的方法
- 方法一,直接列方程
如果
应用Cramer法则:
最终
- 方法二,利用直线方程
因为
![6c0361dcb94cfc01ca082d2c5236fa90.png](https://file2.kaopuke.com:8081/files_image/2023062421/6c0361dcb94cfc01ca082d2c5236fa90.png)
因为直线两侧数值分布是线性的,所以利用比例关系可以直接求得重心坐标:
接下来需要求解直线方程
因为向量
向量
由于参数
代入
最后,解出来全部重心坐标为
- 方法三,利用面积比例 受到方法二的启发,可知,通过内部小三角形面积占比也可以求出来重心坐标
![75ba28acf248312c94244a46cb69275b.png](https://file2.kaopuke.com:8081/files_image/2023062421/75ba28acf248312c94244a46cb69275b.png)
![290b88408bd86297bb8202eea2433ccb.png](https://file2.kaopuke.com:8081/files_image/2023062421/290b88408bd86297bb8202eea2433ccb.png)
一个典型的例子:
因为三角形重心分中线比例1:2,每个小三角形都是大三角形面积的三分之一,所以重心的重心坐标为
计算三角形面积可以采用叉积,两个三维向量叉积,结果向量垂直于叉积向量平面,模长是两叉积向量围城平行四边形面积
子三角形按特定顺序计算叉积得到面积,与大三角形方向相同即为正,反之为负
其中,叉积的计算可以转换为矩阵的乘法
光栅化过程中利用重心坐标插值
透视除法破坏了三角形坐标值的线性关系,不能直接利用重心坐标插值
- 解决方案: 设三维空间中的点的重心坐标为
透视除法后,窗口坐标系中,计算得到的重心坐标为
抽取其中一组,
相当于,
即,
因为
所以,
其中
最后,
对于某个参数
其中
Edge-Equation中的插值
- Edge-Equation中的插值与重心坐标中的插值不同
- 重心坐标插值法需要先计算插值点的重心坐标,然后代入顶点参数,得到插值点的参数。插值点每改变一次,重心坐标需要重新计算一次,但一组重心坐标可以插值任意满足线性关系的参数。
- 而Edge-Equation中的插值是先针对某个参数计算得到一组线性关系,然后将插值点坐标代入线性关系的方程中即可得到插值点针对该参数的插值。待插值的参数发生改变,线性关系需要重新计算,但所有插值点的参数都满足该线性关系。
- 重心坐标插值法需要先计算插值点的重心坐标,然后代入顶点参数,得到插值点的参数。插值点每改变一次,重心坐标需要重新计算一次,但一组重心坐标可以插值任意满足线性关系的参数。
- Edge-Equation中的插值法对透视除法的处理 透视除法前:
其中,
透视除法后:
其中
由此可见,
所以在Edge-Equation算法中插值的计算过程是:
1. 计算 1/w 与 x的线性关系
2. 计算 p/w 与 x的线性关系
3. 计算插值点处的 1/w 与 p/w,然后恢复 插值点处的 p
最后
以上就是朴实老虎为你收集整理的java 向量上的坐标点_线性插值、重心坐标、Edge-Equation中的插值的全部内容,希望文章能够帮你解决java 向量上的坐标点_线性插值、重心坐标、Edge-Equation中的插值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复