【问题标题】:How to rotate a rectangle in 3d space using an axis as a HINGE?如何使用轴作为铰链在 3d 空间中旋转矩形?
【发布时间】:2012-05-25 16:36:33
【问题描述】:

我期待将具有固定轴的矩形旋转为铰链的数学或算法计算。如下图所示。

我有 4 个矩形顶点的位置 (x,y),原点是矩形的中心,因此所需的算法会将我的原始形状的顶点投影到所需的形状顶点中。 (请看下图)

我知道使用 3d 库很容易做到这一点,但我需要使用高级编程语言(如 .Net 或 JAVA 或没有任何 3d 或补充库的其他语言)使用 2d 图形来做到这一点。

请帮助我提供任何想法或参考,或者比所有源代码或算法更好。

提前感谢您的宝贵时间。

【问题讨论】:

  • 任何支持旋转的库都可能支持围绕不同轴旋转的概念。所以,你需要更具体。为您的项目选择一个平台,编写一些代码,直到您需要轮换方面的帮助,然后与我们分享您的代码并告诉我们您遇到的确切问题。
  • Thx @mbeckish 但我的问题很笼统,这与编程语言无关,更多的是关于我原来的 4 个顶点到所需形状顶点的几何计算或矩阵投影
  • 如果您只是在寻找旋转变换背后的数学运算,而不是特定库的方法调用,请查看 Wikipedia。例如,en.wikipedia.org/wiki/Rotation_matrix
  • 检查旋转变换后,它将为您提供 4 个顶点的 3D 坐标,然后检查 3D 投影,它将您的 3D 坐标映射到 2D 平面,因为您正在执行 2D图形:en.wikipedia.org/wiki/3D_projection
  • 最后,您可能想要实现视锥体的概念:en.wikipedia.org/wiki/Viewing_frustum。 3D 投影会将 3D 模型中的每个顶点映射到无限的 2D 平面,其中大部分都在屏幕范围之外。视锥定义了 3D 模型的有限区域如何映射到与屏幕对应的 2D 平面区域。

标签: algorithm 3d geometry graphics2d rotation


【解决方案1】:
【解决方案2】:

根据我的经验,在处理二维时,我发现使用名为 processing 的出色工具取得了巨大成功。处理是 Java 编程语言的扩展,专门针对任何事物的可视化,从数据结构到令人生畏的物理模拟。从您提供的有用图形中,我假设您想在任何给定时间围绕一个点或轴旋转一个结构。看看功能丰富的 API 参考,处理报价(我是新用户,很遗憾我不能链接两个以上的项目,将在下面放 API 参考的链接)。它们具有围绕点旋转和变换的独特功能。但是,它不会围绕所述点旋转结构,而是围绕该点旋转整个屏幕及其包含的所有内容。例如,如果你想将所有东西都围绕原点 (0,0) 旋转 45 度,它会很简单:

void setup()
{
  size(200, 200); // Set the size of the screen to 200 x 200 pixels
  background(255); // Set the background to white
  smooth(); // Smooth the edges of the rectangles
  fill(192); // Fill the rectangle with a light gray
  noStroke(); // No black border on rectangle
  rect(40, 40, 40, 40); // Create an equilateral rectangle (square) that is 40 x 40 pixels at the point (40,40)

  pushMatrix(); //Let the compiler know that you will be modifying the Matrix
  rotate(radians(45)); // Rotate the screen about the origin (by default) 45 degrees clockwise
  fill(0); // Color the following rectangle black
  rect(40, 40, 40, 40); // Draw an equivalent rectangle as the last one, only at the new modified screen coordinates
  popMatrix(); // Let the compiler know you are done modifying the matrix
}

上面的代码将创建两个相同的正方形,一个在点 (40,40),一个在原点顺时针 45 度处。

有一个非常详细的教程可以找到here,它更详细地解释了所有内容。 我真的希望这会有所帮助。 祝一切顺利! API 参考:processing.org/reference/

【讨论】:

  • 感谢 @James 的长时间回复,该库真的很棒,我肯定会在我的项目中使用它,但不幸的是,正如我告诉你的那样,我需要在没有任何库的情况下这样做,在换句话说,我必须自己实现该库的一些小部分,所以看起来 mbeckish 所说的是对我的问题的正确答案。再次感谢您的分享
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多