zoukankan      html  css  js  c++  java
  • 三角形内部线性插值方法

    问题:

      在三角形的三个顶点具有3个不同颜色,如何通过插值计算出三角形中每个点的颜色?

      应用实例:高洛德着色使用3个顶点的颜色进行线性插值,结果如下图:

    解决方案:

      显然,无论是线性插值还是双线性插值的都无法解决这个问题。而使用重心坐标则可以很好的解决这个问题。简单的来说,重心坐标就是子三角形与大三角形的面积比,具体的解释参看维基百科,计算过程如下:

      已知三角形的三个顶点坐标P1, P2, P3, 在三角形内的任意点P, 都存在u和v(由于三角形是一个2D图形,只有两个自由度,所以只要u和v即可),使得

        P = (1 - u - v) * P1 + u * P2 + v * P3

      P点在三角形内,所以(u, v)必须满足条件u ≥ 0, v ≥ 0, u + v ≤ 1。u、v体现了每个顶点对特定区域的权重贡献,(1 - u - v)则是第三个权重,只要计算出u和v,就可以计算出每个顶点对P点的贡献。现在已知P1, P2, P3和P的坐标值,求解u和v,只需要解二元一次方程即可:

        P.x = (1 - u - v) * P1.x + u * P2.x + v * P3.x

        P.y = (1 - u - v) * P1.y + u * P2.y + v * P3.y

      有了u、v值,对P1, P2, P3的颜色值进行加权平均,即可得到P点颜色值。

  • 相关阅读:
    SQL Server中使用convert进行日期转换
    杂记
    sqlserver表分区与调优与行列转换
    HttpModule的认识与深入理解及MVC运行机制
    再谈委托
    ASP.NET forms凭据设置和跳转的几种方法
    IOS学习网址
    Activator.CreateInstance 方法 (Type) 的用法
    update多表更新的2种方式
    SQL自定义函数split分隔字符串
  • 原文地址:https://www.cnblogs.com/wangchengfeng/p/3453194.html
Copyright © 2011-2022 走看看