如何根据鼠标位置旋转精灵?

问题描述 投票:0回答:2

基本上,我有一个使用 SDL 2.0 渲染的精灵,我可以使用

SDL_RenderCopyEx()
围绕纹理的中心原点顺时针旋转可变的量。我想通过使用物理斜线和基于基线的两条直线之间的角度 x 来根据鼠标位置旋转它。我所说的基线可以在数学上表示为 x = orgin_x,其中 orgin_x 是旋转原点。另一条线是沿基线的线段,将水平线端点垂直连接到 orgin_x 点。我想要找到鼠标光标的角度来旋转我的角色。

请不要使用复杂的数学符号。我宁愿将公式以 C 风格格式发布,并请解释数学背后的逻辑,以便我可以理解正在发生的事情并在需要时解决类似的未来问题。

c++ c geometry sdl trigonometry
2个回答
3
投票

一些基本的三角学。您可以使用atan2(delta_y, delta_x)。这样您就可以得到 RAD 中的角度。为了得到你的角度角度,因为 RenderCopyEx 使用角度角度,你需要转换你的角度。您获得一整圈的 360 度和 2*PI Rad。所以

角度_度 = (atan2(delta_y, delta_x)*180.0000)/3.1416

现在你有了进行 RenderCopyEx 的角度了

顺便说一句:

delta_y = origin_y - mouse_y

delta_x = origin_x - mouse_x


0
投票

在我的代码中我必须减去 90 度

    double delta_y = r2.y+50 - mousey ;
    double delta_x = r2.x+50 - mousex ;
    angle_deg = (atan2(delta_y, delta_x)*180.0000)/3.1416 ;
    cout << "angle_deg "<< angle_deg << " delta_x "<<  delta_x <<" delta_y"<< delta_y << "\n"  ; 
    SDL_RenderCopyEx(renderer, texture, nullptr,&r2,angle_deg - 90 ,&r2c,SDL_FLIP_NONE);
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.