algorithm - 旋转矩形,使它们保持与 Canvas 的相对位置

标签 algorithm math rotation

我有一个背景像素图,基本上是一个 Canvas ,我画了一堆 矩形,我需要旋转像素图和矩形。 但是需要旋转背景像素图和矩形 分别地,背景像素图的旋转通过一个 外部库例程,我需要旋转并重绘矩形 手动放在最上面。

到目前为止,我实际上能够通过应用 transformation matrix I got from Wikipedia 到每个顶点。我不知道如何翻译它们,使每个矩形保持其相对于 Canvas 的位置。

这里是一个快速绘图,用于说明我想要实现的目标: enter image description here

我需要用 C 和 Xlib 来做这件事,但我不一定要寻找代码,但会很感激一些一般性的提示/算法。

最佳答案

要获取子对象的平移位置,需要旋转子对象的相对位置向量,然后将其添加到原点:

Notice that the relative vector is rotated

伪代码为:

public static Vector2 OffsetByRotation(Vector2 childPos, Vector2 parentPos, float angle)
{
    var relativeVector = childPos - parentPos;
    relativeVector = Rotate(relativeVector, angle);
    return parentPos + relativeVector;
}

请注意,您的示例图像不仅会旋转父对象,还会对其进行平移:您的左图像围绕 (0, 300) 旋转,但此点随后会平移到 (0, 0)。

enter image description here

关于algorithm - 旋转矩形,使它们保持与 Canvas 的相对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612347/

相关文章:

java - 数据库中属性之间的相似性

用于创建尽可能接近均匀分布的样本的算法?

algorithm - 如何计算大小为 n*m 的网格中有多少个不同大小的正方形?

javascript - 有效地减少时间受限任务之间的等待时间

python - 高效随机抽样

ios - UIView 旋转使用 swift 问题

java - TopCoder 最佳选择算法来自 SRM 489 DIV 2(500 分)

objective-c - S 曲线的向量数学函数

javascript - Threejs 围绕 3d 矩阵 Axis 中的另一个对象旋转一个对象

java - 旋转二维数组中的 block