美文网首页
光栅化03-点和三角形的位置关系的数学表示

光栅化03-点和三角形的位置关系的数学表示

作者: 陈成_Adam | 来源:发表于2021-03-25 08:59 被阅读0次

记三角形的三个顶点分别为v_0,v_1,v_2,坐标分别为(x_0,y_0),(x_1,y_1),(x_2,y_2)。任取一点p(x,y),其与\vec{v_0v_1},\vec{v_1v_2},\vec{v_2v_0}的叉乘分别为:

f_a(x,y)=(x_1-x_0)(y-y_0)-(y_1-y_0)(x-x_0)
f_b(x,y)=(x_2-x_1)(y-y_1)-(y_2-y_1)(x-x_1)
f_c(x,y)=(x_0-x_2)(y-y_2)-(y_0-y_2)(x-x_2)

展开,可得:

f_a(x,y)=(y_0-y_1 )x+(x_1-x_0 )y+x_0 y_1-x_1 y_0
f_b(x,y)=(y_1-y_2 )x+(x_2-x_1 )y+x_1 y_2-x_2 y_1
f_c(x,y)=(y_2-y_0 )x+(x_0-x_2 )y+x_2 y_0-x_0 y_2

因为三角形的三个顶点坐标是已知的,所以可以简写为:

f_a (x,y)=A x+B y+C,其中A=y_0-y_1,B=x_1-x_0,C=x_0 y_1-x_1 y_0
f_b (x,y)=A x+B y+C,其中A=y_1-y_2,B=x_2-x_1,C=x_1 y_2-x_2 y_1
f_c (x,y)=A x+B y+C,其中A=y_2-y_0,B=x_0-x_2,C=x_2 y_0-x_0 y_2

根据上一章节的结论可知:如果f_a(x,y),f_b(x,y),f_c(x,y)符号相同,则点P(x,y)在三角形内部或三角形上。否则,在三角形外部。

可以看到在判断一个点是否在三角形内部所做的计算还是非常多的,那么是否需要对所有的像素点都做这样的运算呢?

现我们假设P(x,y)在三角形内部,那将P(x+1,y)代入f_a(x,y),得:

f_a(x+1,y)=A(x+1)+By+C=Ax+By+C+A=f_a(x,y)+A

同理可得:

f_a(x,y+1)=f_a(x,y)+B

所以,我们只需要对一个点做一次复杂运算,其他点可以通过简单的加法来判断其与三角形的位置关系。

相关文章

网友评论

      本文标题:光栅化03-点和三角形的位置关系的数学表示

      本文链接:https://www.haomeiwen.com/subject/nrwfhltx.html