gpt4 book ai didi

java - 在 Processing 中从相对空间转换为世界空间

转载 作者:行者123 更新时间:2023-11-30 09:49:56 25 4
gpt4 key购买 nike

在 Processing 中将局部相对点转换为世界(屏幕)空间的好方法是什么?

例如,取 Flocking example Processing PDE 附带的。我将如何在 Boid 类中实现 relativeToWorld 方法和 worldToRelative 方法。这些方法将考虑所有在 render 方法中完成的转换。

我想我想转换 PVector 对象,所以方法签名可能类似于:

PVector relativeToWorld(PVector relative) {
// Take a relative PVector and return a world PVector.
}

PVector worldToRelative(PVector world) {
// Take a world PVector and return a relative PVector.
}

最佳答案

不幸的是,Processing 并没有让这些事情变得轻松。它没有为我们提供对转换矩阵的访问,所以我相信我们必须使用手动转换矩阵/vector 乘法。 (如果你很好奇,我在齐次表示中使用了帧到规范的变换矩阵)。

警告:这是在 java 中快速解释的 Mathematica 结果,假设您只有一次旋转一次平移(如在渲染方法中)。翻译仅由 loc PVector 给出。

PVector relativeToWorld(PVector relative) {
float theta = vel.heading2D() + PI/2;
float r00 = cos(theta);
float r01 = -sin(theta);
float r10 = -r01;
float r11 = r00;
PVector world = new PVector();
world.x = relative.x * r00 + relative.y*r01 + loc.x;
world.y = relative.x * r10 + relative.y*r11 + loc.y;
return world;
}

PVector worldToRelative(PVector world) {
float theta = vel.heading2D() + PI/2;
float r00 = cos(theta);
float r01 = sin(theta);
float r10 = -r01;
float r11 = r00;
PVector relative = new PVector();
relative.x = world.x*r00 + world.y*r10 - loc.x*r00 - loc.y*r10;
relative.y = world.x*r01 + world.y*r11 - loc.x*r01 - loc.y*r11;
return relative;
}

关于java - 在 Processing 中从相对空间转换为世界空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com