gpt4 book ai didi

c++ - 透视和双线性变换

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:53 26 4
gpt4 key购买 nike

我正在制作 vector 绘图应用程序,并注意到 Anti Grain Geometry 有一个示例完全符合我的要求。 http://www.antigrain.com/demo/index.html然后下面有一个关于 Win32 透视图的例子。我不明白他们的cpp文件。基于这个例子。如果我有一堆顶点组成一个物体,比如他们的狮子,然后我有4个顶点作为控制点,我怎么实现它们的效果?例如,我对每个点应用什么变换?

谢谢

最佳答案

在您发布的那个页面上,有一个指向源的链接代码。我将在

中解释双线性变换

http://www.antigrain.com/__code/include/agg_trans_bilinear.h.html

这里的想法是找到形式的转换:

output_x = a * input_x + b * input_x * input_y + c * input_y + d
output_y = e * input_x + f * input_x * input_y + g * input_y + h

术语“双线性”来自于这些方程中的每一个都是线性的输入坐标中的任何一个。我们想解决a、b、c 和 d 的正确值。说你有引用要映射到 (0,0)、(1,0)、(0,1) 的矩形 r1、r2、r3、r4,(1,1)(或一些图像坐标系)。

对于 a,b,c,d:

0 = a * r1_x + b * r1_x * r1_y + c * r1_y + d
1 = a * r2_x + b * r2_x * r2_y + c * r2_y + d
0 = a * r3_x + b * r3_x * r3_y + c * r3_y + d
1 = a * r4_x + b * r4_x * r4_y + c * r4_y + d

对于 e,f,g,h:

0 = e * r1_x + f * r1_x * r1_y + g * r1_y + h
0 = e * r2_x + f * r2_x * r2_y + g * r2_y + h
1 = e * r3_x + f * r3_x * r3_y + g * r3_y + h
1 = e * r4_x + f * r4_x * r4_y + g * r4_y + h

您可以随心所欲地解决这个问题。 (如果你熟悉矩阵表示法,这是两个矩阵方程,其矩阵是一样的,然后你只需要找到LU分解一次,求解两个未知 vector )。系数是应用于将矩形的内部映射到长方形。

如果您正在寻找逆变换,也就是说,如果你想知道给定像素将落在哪里,你只需切换输入和输出:

对于 a,b,c,d:

r1_x = a * 0 + b * 0 * 0 + c * 0 + d
r2_x = a * 1 + b * 1 * 0 + c * 0 + d
r3_x = a * 0 + b * 0 * 1 + c * 1 + d
r4_x = a * 1 + b * 1 * 1 + c * 1 + d

对于 e,f,g,h:

r1_y = e * 0 + f * 0 * 0 + g * 0 + h
r2_y = e * 1 + f * 1 * 0 + g * 0 + h
r3_y = e * 0 + f * 0 * 1 + g * 1 + h
r4_y = e * 0 + f * 0 * 1 + g * 1 + h

关于c++ - 透视和双线性变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3273155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com