Simulation yx旋转平面上的点投影

Simulation yx旋转平面上的点投影,simulation,point,projection,depth,Simulation,Point,Projection,Depth,我想模拟2D空间中的深度,如果我有一个点P1,我想我需要将给定的点P1投影到一个顺时针旋转“θ”rads的平面x轴上,以得到P1' 似乎P1'.x坐标必须与P1.x相同,P1'.y必须比P1.y短。在3D世界中: cosa = cos(theta) sina = sin(theta) P1'.x = P1.x P1'.y = P1.y * cosa - P1.z * sina P1'.z = P1.y * sina + P1.z * cosa 我的P1.z=0吗?我试过了,结果P1'.y=P1

我想模拟2D空间中的深度,如果我有一个点P1,我想我需要将给定的点P1投影到一个顺时针旋转“θ”rads的平面x轴上,以得到P1'

似乎P1'.x坐标必须与P1.x相同,P1'.y必须比P1.y短。在3D世界中:

cosa = cos(theta)
sina = sin(theta)
P1'.x = P1.x
P1'.y = P1.y * cosa - P1.z * sina
P1'.z = P1.y * sina + P1.z * cosa
我的P1.z=0吗?我试过了,结果P1'.y=P1.y*cosa没有达到预期的效果

任何回复都将不胜感激,谢谢

编辑:我想要的是,现在我旋转相机并平移矩阵

编辑2:具有起点1点和终点1点的单线示例(这是一条水平线,只要倾斜角度增加,预期结果是一条到“地板”的下降线)


我认为这是符号错误或需要偏移(java canvas绘图(0,0)位于左上角),因为我的倾斜度为0的新线位于所有线的下方,其值为90º新线与原始线匹配

如果要绕x轴顺时针旋转,则执行的计算是正确的。如果你认为你的线是一张纸,旋转0度就是你直接看着线

对于您给出的示例,该线与x轴水平。绕x轴旋转时,这一点不会改变(绕x轴旋转的直线和轴彼此平行)。当您在0和90度之间旋转时,直线的y坐标将随着P1.y*cos(θ)在90度处下降到0而减小(想想那张纸,我们一直绕着它的底边旋转,x轴,在90度角时,纸张是平的,y轴垂直于页面,因此页面的两个边缘都有相同的y坐标,即“x轴”的一侧和相对平行的一侧都有y=0)

因此,正如您在示例中看到的,这是正确的


编辑:90度相乘不能给出精确的零答案的原因很简单

你能更具体地说明你想做什么吗?你有一个点P1,你想以什么方式变换?你想绕哪个轴旋转θ?如果你有一个点在x,y,z(我们称它为P1(x,y,z))你把它绕x轴旋转θ,新的坐标是p1’(x,ycos(θ)+zsin(θ),ysin(θ)+zcos(θ)),正如你所说的,这就是你想要做的吗?谢谢迈克,我的例子是一个真实街道的背景图像,我在一个二维画布(x,y)上画线,我的目的是用一个倾斜角度(我认为是x轴旋转)在我的新“xy倾斜平面”中得到这条线,也许我需要在3D空间中投影,就像我们说的那样,用一个初始p1(x,y,0),然后投影p1’(x,y,z)对于我的屏幕2D空间…好的,你描述的方程是绕x轴旋转θ的正确方程。如果你不明白,有一些事情需要检查。我能问一下你使用的是什么语言吗?要检查的是你的cos和sin函数是以弧度为单位的(你可以检查sin(pi)是否为0)?其次,你能给出一个打印所有点的例子吗(显示所有输入点和输出点以及θ和中间点)你是对的,p1.z应该是0,p1.y应该是=p1.y*cosaI正在使用Java。我很好地转换成弧度。我用一个例子编辑了你的计算,考虑到你发布的数字(并且考虑到你的倾斜角度是度而不是弧度),你的计算都是正确的.你能描述一下你认为应该发生什么吗?这正是我所期望的,所以问题一定是你期望它做一些不同的事情,如果你认为这会有帮助的话,我可以解释一下发生了什么?这里解释一下为什么你所做的对于绕x轴旋转是正确的,le我不知道你期望发生什么,或者你是否需要澄清这些点。好的,计算很好,但正如我说的,系统原点在左上角,所以解决方案是P1.y=画布高度-P1.y,然后是P1'.y=画布高度-P1'.y,我明白了!现在的问题是做透视,因为p的2D投影oint是一个正交的解决方案…感谢Mike的帮助和支持!没问题,很高兴您得到了解决方案,如果答案有帮助,请单击“接受”。