首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二维坐标系中的等距投影

二维坐标系中的等距投影
EN

Stack Overflow用户
提问于 2009-07-27 18:33:29
回答 3查看 4.5K关注 0票数 5

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

我在管子上找了好几个地方。我和Mostly here.还没能破解它。不幸的是,我不是数学专业的。

我需要做的是在由10px块组成的等轴测平面上将一个点从(0,0)移动到(1,0)或(0,1)。在normal-ville中,我只需要做(x+10,y+0)或(x+0,y+10)就可以在我的2d平面上移动自己。

我的大部分工作都是在iPhone上做核心动画,如果它能提供更好的上下文。

谢谢您抽时间见我。

DP

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-27 18:58:31

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

真的,如果你一直在做这样的图形工作,那么学习三角、矩阵代数和向量代数的知识将是一个非常好的主意。使用向量和矩阵可以使更复杂的变换(如透视投影)更容易,也有助于更简单的变换,如等轴测变换。

实际上,所谓的“图形转换”所做的就是通过平移、旋转、缩放、反射和剪切的某种组合对点进行文字转换;对于二维坐标系,这些概念中的大多数应该是您所熟悉的,并且可以相当简单地表达出来。在下面的示例中,我将使用由两个点定义的线段,这两个点以"(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(theta)),其中"theta“是您希望旋转的角度值,而比例将是(a_x,b_y),其中a是沿x轴的比例因子,b是沿y轴的比例因子。(统一比例是指两个轴的比例因子相等的比例,(a_x,a_y)也是如此。)

组合简单变换允许您随心所欲地移动对象,而组合简单变换的最简单方法是使用matrix multiplication

...Actually,这类东西你最好是通过自学或者某种数学课来学习,因为我现在意识到,我自己甚至需要花太多的时间才能真正开始理解这些东西,但我现在会给你一些我能找到的其他参考资料。

http://en.wikipedia.org/wiki/Transformation_(geometry)

http://en.wikipedia.org/wiki/Transformation_matrix

http://en.wikipedia.org/wiki/Euclidean_vector (对您来说可能是必要的,也可能不是。)

不管怎样..。虽然你可以简单地使用你在网络上找到的转换方程,但更好的做法是学习转换是如何实际工作的,并学习如何自己应用它们,因为它可以让你更灵活,能够以不同的方式进行转换,如果需要的话,还可以让你自己做更复杂的转换。

我希望这对您有所帮助;它可能不是您想要的直接答案,但如果您愿意花时间和精力自学(或者被教授,如果您决定在某个地方学习,自学并不适合每个人)如何使用矩阵和矩阵变换等,您可能会发现自己更了解您正在尝试做的事情。

编辑:当然,如果你已经定义了图形变换,并且你自己不必担心它们,那么在3D空间中平行于任何轴的任何平面上移动一个点是非常容易的。基本上,在内存中,这些点位于(或应该位于) "normal-ville“中,用您的话来说,就是三维笛卡尔坐标系。假设发生移动的平面是z= 0,并且点的坐标以等价于(x,y,z)的格式存储,您可以简单地使用(x + 10,y,0)或(x,y+ 10,0)来移动点;如果您有一个点位于比其他点更高的平面上,则只需为z设置一个较高的值(如果您有一个点在较低平面上,则为z<0设置一个值)。将移动应用于点本身之后,可以将图形变换应用于环境(如果您还没有这样做),这会将其设置为在输出设备(在本例中为iPhone)上正确显示。应用转换要比这复杂一点,但如果您有一个预先编写的方法来执行此操作,那么您就已经准备好了。

票数 12
EN

Stack Overflow用户

发布于 2009-07-28 13:00:13

如果您正在使用核心动画,则可以使用正确的3-D变换应用程序轻松完成此操作。使用如下代码创建一个CATransform3D:

代码语言:javascript
运行
复制
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的背景层)上的适当属性应用该转换将在3-D中倾斜该层。该层上的子层的移动仍将在正常的笛卡尔坐标空间中发生,但您将在这些子层上进行等距透视。

需要注意的是,您可能需要手动调整转换的m34组件,以防止发生透视效果。

票数 4
EN

Stack Overflow用户

发布于 2009-07-27 18:42:22

您应该计算出您的等轴测变换;也就是说,您应该有一个从原始坐标告诉您的变换,即某物在等轴测投影上的位置。例如,等距投影可能类似于((isox =x+ (y / 2)),(isoy = y)) (这只是一个糟糕的例子)。从这个等式中,你可以得到你的"normal-ville“x和y坐标,并由此计算出你的投影。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1189830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档