问题标签 [coordinate-transformation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
coordinate-transformation - 将 (x,y,z) 坐标转换为单个索引,以最小化元素到邻居的“距离”
如果您有一个固定大小 (N) 的 3D 空间,积分坐标在 [0,N[ ,您如何将这些 (x,y,z) 坐标转换为单个线性索引 [0,N*N*N[ , 其中一个坐标 (x,y,z) 到它的下一个邻居 (x-1,y,z), (x+1,y,z), ... (26 个邻居) 的平均距离被最小化,比较到简单的“索引 = x + N*y + N*N*z”公式?
在我的情况下,一个昂贵的公式是一个可接受的解决方案,因为 N 是固定的并且不是太大,所以我可以一次计算映射并缓存结果,如果它很昂贵。
我需要这个的原因是我试图根据邻近度压缩相同的值,因此将相邻值放在数组中可以提高压缩率。
如果您可以指向一些Java代码,那就更好了...
3d - 如何从 3D 平面和已知原点计算新的基础(变换矩阵)?
给定一个 3D 平面和它上面的任意点,我想考虑(0,0,0)
一个新基础的起源,可以:(A)根据这些信息定义一个基础?并且 (B) 创建一个转换矩阵,允许我在世界空间和新基础之间进行转换?
我可以假设转换是仿射的。
非常感谢!
r - 从经度/纬度确定 UTM 区域(要转换)
我正在编写一个程序,它需要一些纬度/经度点,我在内部将它们转换为 UTM,以便以米为单位进行一些计算。
纬度/经度点本身的范围非常小——大约 200m x 200m。它们几乎总是可以依赖于单个 UTM 区域内(除非你不走运并且跨越区域的边界)。
但是,纬度/经度所在的区域不受限制。有一天,该计划可能会为澳大利亚的人们运行(哦,即使是一个州也有多少个区域,这已经给我带来了多少痛苦......),另一天为墨西哥的人们运行。
我的问题是——有没有办法确定特定的经纬度位于哪个区域,以便可以将其输入转换库(我目前使用 proj4 以及 R 包rgdal
)。
我的语言是 R,但答案不一定是 - 也许它只是一个简单的计算,或者我可以将系统调用嵌入到proj
可执行文件中。
干杯。
matrix - 来自欧拉角的单位向量
我正在研究增强现实引擎的artoolkit。引擎从相机获取输入,寻找标记并创建相机的变换矩阵。当我对变换矩阵求逆时,我能够在标记坐标系中提取相机的变换和平移。
我还有方法 getAngle,它会从变换矩阵中给我三个欧拉角。(来源:http ://artoolkit.sourceforge.net/apidoc/ar_8h.html#a91c0942b8061abae28060cfd548ed2a )我想从这三个欧拉角中创建方向单位向量。通过拥有这个方向单位向量,我可以给人一种玩家正在从相机中垂直于手机相机表面方向射击子弹的印象。子弹将从相机 XYZ 的位置开始,进一步的位置将是旧位置 + 单位向量乘以时间增量速度.....
我做对了吗?以及如何从欧拉角中提取这个方向向量。谢谢
c++ - 在画布上绘制旋转图像
我正在尝试用另一个图像的旋转版本替换图像的一部分。图像源应该以这样一种方式出现,即 origin_source 最终位于图像 *this 中的 orign_dest。在替换像素之前,源也应该围绕 origin_source 旋转。
下面的代码在 R 是镜像矩阵时有效,但如果我实际上将其变为旋转矩阵,则生成的图像会被剪切。怎么了?
以下是使用的其他一些功能:
T=双
方向是归一化向量
还
matlab - 在 Matlab 中转换 (x,y) 坐标
在 Matlab 中,我有这个矩阵:
Grid
有尺寸[x,y]
我已将其重塑为单行矩阵
Row
与尺寸[1,x*y]
。
我怎么知道在哪里可以找到Grid(x,y)
矩阵中的坐标,Row(1,?)
反之亦然?Matlab中有这个功能吗?
geometry - 如何将点投影到球体上
如果我有一个点 (x,y,z) 如何将其投影到球体 (x0,y0,z0,radius) 上(在其表面上)。我的输入将是点和球体的坐标。输出应该是球体上投影点的坐标。
只需从笛卡尔坐标转换为球坐标?
objective-c - 视差:将图层上的一个点转换为其他视差图层的坐标空间
我有三个具有以下 z 顺序和尺寸(无偏移)的子层作为 cocos2d 父层的子层:
最顶层:z:-1 宽度:2048 高度:2048
中间层:z:-2 宽度:1536 高度:1536
最深层:z:-3 宽度:1024 高度:1024
使用 UIScrollView(附加到 ViewController)作为 cocos2d 使用的 glView 的子视图,我使用以下比率平移(并因此滚动)每个层的位置(从而实现 3D 效果):
最顶层:dragPt.x * 1(y 相同)
中间层:dragPt.x * 0.75(y 相同)
最深层:dragPt.x * 0.5(y 相同)
我检测每一层上的用户输入如下:
- 将另一个子视图(我们称之为 seeThrough)附加到 glView 具有以下尺寸 480x320(应用程序处于横向模式)
--(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
在此子视图中使用,我将触摸点存储在一个名为“touchLocation”的 iVar。
- 在我的 cocos2d-layer 中,我使用以下代码来确定每一层的触摸位置:
(320 是屏幕高度,减去它需要将 Y 从 UI 转换为 gl 坐标系)
滚动图层时,它们的位置是负数。通过使用 seeThrough 视图作为参考平台来捕获 480x320 表面上的触摸,我可以通过简单地从 seeThrough 视图中捕获的点减去每一层的负位置值来成功确定每一层坐标系上的触摸位置。
问题是当根本没有这样的参考点时,例如,当我尝试在没有用户输入的情况下在其中一个图层上获取精灵的位置时。
没有参考点,我发现自己无法想出一个解决方案,使我能够确定 cocos2d 层之一上的任何特定点。
我尝试了几种方法(convertToNodeSpace、convertToWorldSpace 以及随着时间的推移最终疯狂的数学),但都没有成功。
因此,我的问题是:如何确定其中一层上的精灵的位置并将其转换为其他层之一的空间?
场景:
- 精灵在最深层,但我想将它移动到中间层上的位置
- 精灵在最顶层,我想将它移动到最深层
- 等等...
coordinate-transformation - 4x4 变换矩阵 - 如何找出旋转中心?
给定一个任意的 4x4 变换矩阵,我如何找出旋转中心?
android - Reverse projecting screenspace coordinate to modelspace coordinates
I am working on an Android Application in which a 3d scene is displayed and the user should be able to select an area by clicking/tapping the screen. The scene is pretty much a planar (game) board on which different objects are placed.
Now, the problem is how do I get the clicked area on the board from the actual screen-space coordinates?
I was planning on using gluUnProject()
, as I have access to (almost) all the necessary parameters. Unfortunately I am missing the winZ
param, and cannot get the current depth as the touch event is occurring in a different thread than the GL-thread.
My new plan is to still use gluUnProject, but with a winZ
of 0, and then project the resulting point onto the board (the board stretches from 0,0,0
to 10,0,10
in model space), However, I can't seem to figure out how to do this?
I would be very happy if anyone could help me out with the maths needed to do this (matrices were never my strongest side), or perhaps find a better solution.
To clarify; here is an image of what I want to do:
The red rectangle represent the device screen, the green x is the touch event and the black square is the board (grey subdivisions represent a square of one unit). I need to figure out where on the board the touch has happened (in this case it is in square 1,1).