在二维空间中的等轴投影平面上移动一个点需要使用什么方程?
我已经在网络上搜索了多个地方,主要是这里,但我无法理解。不幸的是,我不是数学专业的。
我需要做的是在由10像素块组成的等轴投影平面上将一个点从(0,0)移动到(1,0)或(0,1)。在普通的二维平面上,我只需使用(x+10,y+0)或(x+0,y+10)来移动自己。
如果这有助于更好地理解,我在iPhone上的核心动画中完成了大部分工作。
谢谢您的时间。
DP
编辑:当然,如果您已经定义了图形变换并且不必自己担心它们,那么在三维空间中沿任意轴平行于任何平面移动点非常容易。基本上,在内存中,点位于(或应该位于)一个“normal-ville”三维笛卡尔坐标系中。假设运动发生的平面是平面z = 0,并且点的坐标以等效于(x,y,z)的格式存储,则可以简单地使用(x + 10,y,0)或(x,y + 10,0)移动点;如果您有一个点位于比其他点更高的平面上,则只需设置更高的z值(如果您有一个点位于较低的平面上,则设置z< 0的值)。一旦将运动应用于点本身,如果您尚未这样做,则可以将图形变换应用于环境,从而为其在输出设备上进行正确显示(在您的情况下,是iPhone)。应用变换比这稍微复杂一些,但是如果您有预先编写的方法来执行此操作,那么就可以了。
如果你正在使用核心动画,通过正确应用3D变换,你可能很容易就能实现这一点。可以使用以下代码创建一个CATransform3D:
CATransform3D perspectiveRotation = CATransform3DMakeRotation(-40.0 * M_PI / 180.0, 0.0, 1.0, 0.0);
perspectiveRotation = CATransform3DRotate(perspectiveRotation, -55.0 * M_PI / 180.0, perspectiveRotation.m11, perspectiveRotation.m21, perspectiveRotation.m31);
然后,使用适当的属性在CALayer(或UIView的后备层)上应用该变换将使图层在3D中倾斜。该层上子图层的移动仍会在正常的笛卡尔坐标空间中发生,但您将对这些子图层具有等距透视。
需要注意的是,您可能需要手动调整变换的m34分量,以防止出现透视效果。