Iphone 二维坐标系中的等轴测投影

Iphone 二维坐标系中的等轴测投影,iphone,math,traversal,isometric,Iphone,Math,Traversal,Isometric,在二维空间中移动等轴测平面上的点需要什么方程式 我在管子上找了好几个地方。我还没能破译它。不幸的是,我不是数学专业的学生 我需要做的是在由10px块组成的等轴测平面上,将点从(0,0)移动到(1,0)或(0,1)。在正常情况下,我只需要做(x+10,y+0)或(x+0,y+10)在二维平面上移动自己 我的大部分工作都是在iPhone的核心动画中完成的,如果这能提供更好的环境的话 谢谢你抽出时间 DP你应该算出等距变换;也就是说,你应该有一个变换,告诉你从原始坐标,那里有东西在等轴测投影上。例如,

在二维空间中移动等轴测平面上的点需要什么方程式

我在管子上找了好几个地方。我还没能破译它。不幸的是,我不是数学专业的学生

我需要做的是在由10px块组成的等轴测平面上,将点从(0,0)移动到(1,0)或(0,1)。在正常情况下,我只需要做(x+10,y+0)或(x+0,y+10)在二维平面上移动自己

我的大部分工作都是在iPhone的核心动画中完成的,如果这能提供更好的环境的话

谢谢你抽出时间


DP

你应该算出等距变换;也就是说,你应该有一个变换,告诉你从原始坐标,那里有东西在等轴测投影上。例如,等距投影可能类似((isox=x+(y/2)),(isoy=y))(只是一个糟糕的示例)。从这个方程中,你可以得到“normal ville”的x和y坐标,并从中计算出你的投影。

好吧,如果你打算做更多的图形游戏编程,我建议至少要辅修数学

实际上,如果你继续做像这样的图形,学习三角学、矩阵代数和向量代数的知识将是一个非常好的主意。使用向量和矩阵可以使更复杂的变换(例如透视投影)更容易,也可以帮助进行更简单的变换,例如等距变换

无论如何(其中一些,如果不是很多的话,可能会让你回顾):实际上,所谓的“图形变换”是通过平移、旋转、缩放、反射和剪切的组合对点进行文字变换;对于二维坐标系,这些概念中的大多数应该是您熟悉的,并且可以相当简单地表示出来。在下面的示例中,我将使用由两个点定义的线段,以“(x1,y1)、(x2,y2)”的形式表示;你可能想把它们画在一张图表纸或其他更容易理解的东西上

示例:翻译将从(0,0)、(1,0)到(1,0)、(2,0),或从(0,0)、(1,0)到(0,1)、(1,1);旋转将从(0,0)、(1,0)到(0,0)、(0,1);缩放将从(0,0)、(1,0)到(0,0)、(2,0)或从(0,0)、(1,0)到(0,0)、(0.5,0)

使用更简单的表示法,单点(x,y)的平移可以表示为(x+a,y+b),其中a和b是所有实数范围内的常数。旋转是(x*cos(θ),y*sin(θ)),其中“θ”是希望旋转的角度值,比例是(ax,by),A是沿x轴的比例因子,b是沿y轴的比例因子。(均匀比例是两个轴的比例因子相等的比例,因此(ax,ay)也是如此。)

组合简单变换可以让你随意移动对象,而组合简单变换最简单的方法就是使用

…事实上,这类事情你最好通过自学或数学课来学习,因为我现在意识到,要让你真正理解这些事情,我自己都需要花费太多的时间,但我会给你我现在能找到的其他参考资料



(您可能需要,也可能不需要。)

无论如何。。。虽然您可以简单地使用您在web上找到的转换方程式,但更好的做法是了解转换的实际工作方式,并学习如何自己应用它们,因为它可以让您更加灵活,能够以不同的方式进行转换(如果需要的话),也可以让您自己进行更复杂的转换

我希望这对你有所帮助;这可能不是你想要的即时答案,但如果你愿意投入时间和精力自学(或者如果你决定去某个地方上课[毕竟,自学并不适合每个人]),如何使用矩阵和矩阵变换等,你可能会发现自己更了解自己想要做的事情


编辑:当然,如果已经定义了图形变换,并且自己不必担心这些变换,那么在与三维空间中的任何轴平行的任何平面上移动点是非常容易的。基本上,在记忆中,这些点位于(或应该位于)一个“正常的”坐标系中,用你的话来说,就是三维笛卡尔坐标系。假设移动发生的平面为平面z=0,且点的坐标以相当于(x,y,z)的格式存储,则可以简单地使用(x+10,y,0)或(x,y+10,0)移动点;如果有一个点位于比其他点更高的平面上,只需为z设置一个更高的值(如果有一个点位于较低的平面上,则为z设置一个小于0的值)。将移动应用到点本身后,如果尚未将图形变换应用到环境中,则可以将其应用到环境中,从而将其设置为在输出设备(在您的示例中为iPhone)上正确显示。应用变换比这要复杂一点,但是如果你有一个预先编写好的方法来做这件事,那么你就万事俱备了。

如果你正在使用核心动画,通过正确地应用三维变换,你可能可以轻松地做到这一点。使用如下代码创建CATTransferM3D:

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的背景层)上使用适当的属性应用该变换,将在三维中倾斜该层。该层上的子层的移动仍将发生在正常的笛卡尔坐标空间中,但您将在这些子层上具有等轴测透视图

作为警告,您可能需要手动调整变换的m34组件,以防止发生透视效果