BOUNTY UPDATE
在Denis的链接之后,这是如何使用threeblindmiceandamonkey代码:
// the destination rect is our 'in' quad
int dw = 300, dh = 250;
double in[4][4] = {{0,0},{dw,0},{dw,dh},{0,dh}};
// the quad in the source image is our 'out'
double out[4][5] = {{171,72},{331,93},{333,188},{177,210}};
double homo[3][6];
const int ret = mapQuadToQuad(in,out,homo);
// homo can be used for calculating the x,y of any destination point
// in the source, e.g.
for(int i=0; i<4; i++) {
double p1[3] = {out[i][0],out[i][7],1};
double p2[3];
transformMatrix(p1,p2,homo);
p2[0] /= p2[2]; …
Run Code Online (Sandbox Code Playgroud) 我们有一个红色正方形的网格.意思是我们有一个3个正方形(角度= = 90度)的数组,我们知道它们具有相同的大小,位于同一平面上,并且相对于它们所躺着的平面具有相同的旋转,并且不在同一条线上平面.
我们有一个包含带正方形平面的空间投影.
我们想要用正方形转动我们的平面投影,这样我们就会看到它像我们面对的那样,一般来说我们需要一个公式来转动原始平面投影的每个点,这样它就像我们在下面的图像上一样.
什么公式可以用来解决这个问题,如何解决它,有没有人面临这样的事情呢?
我们试图解决在平面的两个不同表示中定位点的问题.我们拥有的第一个平面被旋转以创造视角; 第二个是同一平面的二维视图.我们知道每个计划都有4个积分.问题是如果我们在平面1中有一个任意点,我们如何找到平面2中的对应点?
最好用说明用例来最好地澄清问题.我们左边有一张图片.
二维空间布局图
所以我们拥有的是两张照片中的红色方块.请注意,如果可能的话,我希望2D空间不一定是正方形.这些是我们提前和已知的.我在第一张图像中也在平面上放置了绿点.我希望能够将图像1中的点投影到图像2中的空间上.
另请注意图像1我没有定义的窗口或眼睛位置.我只知道图像1中的红色方块是红色方形图像2的变换,并且图像2位于2D空间中.