gpt4 book ai didi

c++ - 围绕点的二维旋转

转载 作者:行者123 更新时间:2023-11-28 08:10:12 26 4
gpt4 key购买 nike

我正在尝试在我的编辑器中添加一些功能,允许用户将选定的项目拖动到给定的方向尽管我遇到了一个该死的问题。

这是我的代码:

//Origin
double objectx = selection->getX();
double objecty = selection->getY();

//Point
double pointerx = input->getMouseX();
double pointery = input->getMouseY();

//Displacement
double displacementx = fabs(pointerx - objectx);
double displacementy = fabs(pointery - objecty);

//Angle
double angle = atan2(displacementy,displacementx);

//Point
double pointx = displacementx * cosf(angle) + displacementy * sinf(angle);
double pointy = displacementy * cosf(angle) - displacementx * sinf(angle);

//Final position
double fx = objectx + pointx;
double fy = objecty + pointy;

//Save alpha
const bool alpha = graphics->getAlpha();

//Draw selection
graphics->setAlpha(false);
graphics->color(selection->getColor());
graphics->renderQd(selection->getBitmap(),
CRect(objectx,
objecty,
selection->getWidth(),
selection->getHeight()));

//Draw pointer around selection
graphics->setAlpha(true);
graphics->color(editor::ssImg[0]->getColor());
graphics->renderQd(editor::ssImg[0]->getBitmap(),
CRect(objectx + pointx,
objecty + pointy,
editor::ssImg[0]->getWidth(),
editor::ssImg[0]->getHeight()));

//Restore alpha
graphics->setAlpha(alpha);

确切的问题是选择指针不仅跟随鼠标的旋转,而且实际上在鼠标的位置(!)。所需的行为是指针锁定在选择的偏移但指向鼠标的角度。

任何擅长数学的人都能看出这里有什么问题吗?

最佳答案

据我了解,您想要的行为假定存在三个点:您旋转的原点、提供相对于原点方向的“鼠标”以及提供距离的“选择”起源。 (有点令人困惑,您的代码的结果是“选择指针”。我认为“选择”是指所选对象的原始位置,“选择指针”是指它被拖动的位置到目前为止?)

然而,您的代码实际上只引用了其中的两个点:(objectx, objecty),我认为这是原点,以及 (pointerx , pointery),我假设它是“鼠标”。您的代码从不提及“选择”;因此,自然地,“选择”对代码的结果没有影响。

还有一些其他问题 — Oli Charlesworth 在上面的评论中指出,您错误地将角度除以 π/180,这意味着您应用了非常小的旋转(这就是为什么它看起来像您以 selection pointer = mouse 结束;事实上,它们相对于旋转原点可能相差几度,但这不会立即引起注意)——但与其解决这些问题,我建议你改变你的方法。我建议您通过缩放“鼠标”以匹配“选择”的大小来生成它,而不是通过旋转“选择”来匹配“鼠标”的角度来生成“选择指针”。恕我直言,这方面的数学更简单。

如果您确实想坚持通过旋转“选择”以匹配“鼠标”的角度来生成“选择指针”的方法,那么您需要解决两个主要问题。您当前的代码将“鼠标”旋转“鼠标”的当前角度。部分修复是旋转“选择”;修复的另一部分是旋转“鼠标”和“选择”的当前角度之间的差异

关于c++ - 围绕点的二维旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342374/

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