如何从一个笛卡尔系统转换为另一个笛卡尔系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从一个笛卡尔系统转换为另一个笛卡尔系统相关的知识,希望对你有一定的参考价值。

2D问题:我在笛卡尔系统中测量三角形的3个末端的位置。现在我将系统(三角形)移动到另一个笛卡尔系统并测量两端的位置。如何根据此数据识别第3端的位置?

谢谢! (对不起的英语作为第二个角度抱歉)

答案

这是一个非常模糊的问题,但如果我正确地阅读它,那么你需要的信息甚至更少。如果您将第一个坐标系转换为第二个坐标系,则将其应用于三个点中的每一个以找到3个等效点中的每一个。

否则,如果你没有转型,我认为这是不可能的。毕竟,坐标系的无限多个可能的变换可以导致两个点的相同的两个位置,而第三个点的不同位置。

另一答案

这个问题来自8年前,但即使它有点模糊,我认为它可以相当简洁地回答,如果我遇到它,那么也许其他人会遇到它并从实际的真实答案中获得一些好处而不是被接受的那个。 (我为不小心推翻已接受的“答案”而道歉。我原先对它进行了投票,但意识到这个问题实际上有点模糊,试图扭转我的downvote。可悲的是,由于我的noob rep,这似乎已经转化为实际的upvote。它不值得投票,但它也不值得投票。)

导致了

所以,假设您有一个简单的笛卡尔网格或参考框架:

A 10x10 cartesian reference frame

在该10x10参考框架内,您有一个三角形对象:

A isosceles triangle in a cartesian reference frame with one point at origin

我没有标记图像,但这个三角形的(a,b,c)坐标显然是a =(0,0),b =(0,4),c =(4,0)。

现在让我们说我们在笛卡尔参考系(网格)中移动该三角形:

Triangle object translated from origin on a cartesian grid

我们已经移动了三角形x = x + 1和y = y + 1,因此,假设“b”和“c”的新坐标是b =(1,5)和c =(5,1) ),什么是“a”?

很明显,“a”将是(1,1),但是看看数学,我们可以看到

ΔB= B2-B1

ΔB=(X2,Y2) - (X1,Y1)

ΔB=(1,5) - (0,4)

Δb=(1-0,5-4)

∴Δb=(1,1)或(+ 1,+ 1)

如果我们对两个“c”坐标做同样的反应,我们得到相同的答案,Δc也等于(1,1),因此它是平移(线性运动)而不是旋转,这意味着Δa也是(1,1)!所以:

A2 = A1 +ΔA

= =(0,0)+(+ 1,+ 1)

a2 =(0 + 1.0 + 1)∴

∴a2=(1,1)

如果你看一下图像,你可以清楚地看到“a”的新位置是(1,1)。

翻译

但那只是引导。你的问题是从一个笛卡尔参考系转换到另一个参考系。请考虑您的10x10参考帧位于更大的参考帧内:

A "local" cartesian reference frame within a "global" cartesian reference frame

我们可以将您的10x10网格称为“本地”参考帧,它可能存在于“全局”参考帧中。在此全局参考帧中实际上可能存在许多其他“本地”参考帧:

Multiple "local" cartesian reference frames within a "global" cartesian reference frame

但为了简单起见,我们当然只考虑另一个笛卡儿参考框架:

A "local" cartesian reference frame within a "global" cartesian reference frame

现在我们需要在“全局”参考框架内翻译“本地”参考框架:

A "local" cartesian reference frame translated within a "global" cartesian reference frame

所以,“局部”,我们三角形的(a,b,c)坐标仍然是{(0,0),(0,4),(4,0)},但是我们的局部参考系的起源未与全局参考框架的原点对齐!我们的本地参考框架已经移动(+ 3.5,+ 1.5)!

现在三角形的位置是什么?!

你基本上以同样的方式接近它。我们的“局部”参考系的相对位置是(+ 3.5,+ 1.5),我们称之为帧的差异Δf,因此相对于全局原点的三角形将是ag = al +Δf,bg = bl +Δf ,和cg = cl +Δf,其中(ag,bg,cg)是全局参考系内的坐标,(al,bl,cl)是局部参考系内的坐标。

三维笛卡尔系统

它完全相同,你只需要在三角形的位置包含第三个“z”坐标。

回转

我在你原来的问题中做出的一个假设是,你实际上是在询问翻译,而且在你8年前提出这个问题时对轮换不感兴趣。

但是,很快,您需要使用触发器来旋转参考系中的2d对象,因此您需要首先确定旋转对象的位置,我们称之为旋转轴。然后,一旦确定旋转轴的位置,重新计算三角形中三个点中每个点的(x,y):

x = r·cosθ

y = r·sinθ

其中θ是我们旋转物体的角度,“r”是该点与旋转轴的距离,“·”仅表示乘法。

所以,如果我们将三角形在“a”点周围逆时针旋转30°,它可能看起来像这样:

An isosceles triangle rotated 30° counter clockwise within a cartesian reference frame

但是,再次,这不是你的问题。你的问题是,“考虑到两个点的位置,确定第三个点的位置”。

没有任何解释,只是因为我不认为你在询问轮换,你做的是你倒退:

如果x = r·cosθ,那么θ= arccos(x / r)

现在你有了旋转角度,你现在可以将其应用于缺失点的原始位置以找到它的(x,y),并且与我们原始的平移示例一样,也可以从一个笛卡尔参考系到另一个参考系。这意味着,如果您的“本地”参考框架在全局参考框架内旋转,即使看起来您的本地框架内没有任何变化,您也可以在全局框架内绘制对象点的位置。

而且,这也适用于3D参考帧。

最后,如果您的笛卡尔局部参考框架都被翻译和旋转,几乎可以肯定,那么您将应用这两种方法将您的点绘制到另一个(全局?)笛卡尔参考框架上。

真实世界的应用

哦,这么多!每天当我们开车或走在街上,我不知道从哪里开始时,我们的大脑是如此直观地做到这一点!

翻译很容易,但是当穿过轴时旋转会变得有点毛茸茸。使事情变得更容易的一个技巧是将对象从一个引用帧转换为另一个引用帧,以使trig更直接。

在图片中讲述故事:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

那只是一个开始......

我希望有所帮助。

以上是关于如何从一个笛卡尔系统转换为另一个笛卡尔系统的主要内容,如果未能解决你的问题,请参考以下文章

卡尔曼滤波

ActionScript 3 从球形坐标转换为笛卡尔坐标

将图像从笛卡尔坐标转换为极坐标 - 肢体变暗

OpenCV标准霍夫直线检测详解

3D数学基础:图形与游戏开发 第二章 笛卡尔坐标系统

关于卡尔曼滤波