我有一个背景像素图,基本上是一个 Canvas ,我画了一堆 矩形,我需要旋转像素图和矩形。 但是需要旋转背景像素图和矩形 分别地,背景像素图的旋转通过一个 外部库例程,我需要旋转并重绘矩形 手动放在最上面。
到目前为止,我实际上能够通过应用 transformation matrix I got from Wikipedia 到每个顶点。我不知道如何翻译它们,使每个矩形保持其相对于 Canvas 的位置。
我需要用 C 和 Xlib 来做这件事,但我不一定要寻找代码,但会很感激一些一般性的提示/算法。
最佳答案
要获取子对象的平移位置,需要旋转子对象的相对位置向量,然后将其添加到原点:
伪代码为:
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)。
关于algorithm - 旋转矩形,使它们保持与 Canvas 的相对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612347/