C#围绕图像旋转图像';s位置,相对于鼠标位置
我在相对于鼠标位置旋转图像时遇到了一些问题。我只能让图像围绕它自己的点旋转,而不是在它上面旋转 下图说明了我要做的事情: 这是我的代码:C#围绕图像旋转图像';s位置,相对于鼠标位置,c#,image,rotation,cursor,C#,Image,Rotation,Cursor,我在相对于鼠标位置旋转图像时遇到了一些问题。我只能让图像围绕它自己的点旋转,而不是在它上面旋转 下图说明了我要做的事情: 这是我的代码: Image sprite = Image.FromFile("1.png"); private Point spritePos; public Enemy(Point Position) { spritePos = Position; } public void Render(Graphics dc) { dc.TranslateTran
Image sprite = Image.FromFile("1.png");
private Point spritePos;
public Enemy(Point Position)
{
spritePos = Position;
}
public void Render(Graphics dc)
{
dc.TranslateTransform(spritePos.X, spritePos.Y); //Sets rotation point
float angle = CalcAngle(Cursor.Position);
dc.RotateTransform(angle); //Rotates the graphics transform
dc.DrawImage(sprite, spritePos);
dc.TranslateTransform(-(spritePos.X), -(spritePos.Y));
}
private float CalcAngle(Point TargetPos)
{
Point ZeroPoint = spritePos;
if (TargetPos == ZeroPoint)
{
return 0;
}
double angle;
double hypotenuse;
//Calculates the hypotenuse using Phytagoras(a^2 + b^2 = c^2)
hypotenuse = Math.Sqrt( //hypotenuse = squared(c^2)
Math.Pow((TargetPos.Y), 2) + //a^2 +
Math.Pow((TargetPos.X), 2)); // b^2
angle = Math.Acos((TargetPos.X) / hypotenuse); //Calculates the angle in radians
angle = angle * 180 / Math.PI; //Converts the radians to degree's
//If the cursor's y position is negative('above' the player), the returned angle is also negative
if (TargetPos.Y < 0)
{
return -(float)angle;
}
else
{
return (float)angle;
}
}
Image sprite=Image.FromFile(“1.png”);
私用点spritePos;
公敌(点位)
{
spritePos=位置;
}
公共无效渲染(图形dc)
{
dc.TranslateTransform(spritePos.X,spritePos.Y);//设置旋转点
浮动角度=角(光标位置);
dc.RotateTransform(角度);//旋转图形变换
dc.DrawImage(精灵、精灵);
dc.TranslateTransform(-(spritePos.X),-(spritePos.Y));
}
专用浮动卡角(Point TargetPos)
{
点零点=spritePos;
如果(TargetPos==零点)
{
返回0;
}
双角度;
双斜边;
//使用Phytagoras(a^2+b^2=c^2)计算斜边
斜边=数学.Sqrt(//斜边=平方(c^2)
Math.Pow((TargetPos.Y),2)+//a^2+
Math.Pow((TargetPos.X),2));//b^2
角度=数学.Acos((TargetPos.X)/斜边);//以弧度计算角度
角度=角度*180/Math.PI;//将弧度转换为度
//如果光标的y位置为负值(“在播放器上方”),则返回的角度也为负值
如果(目标位置Y<0)
{
返回(浮动)角;
}
其他的
{
返回(浮动)角;
}
}
一些指向正确方向的指针将是非常感谢的:)你的基本想法是正确的,但顺序是错误的 首先,您应该将
dc
转换为0,0。然后旋转,然后平移回原始位置
dc.TranslateTransform(-spritePos.X, -spritePos.Y); //Sets rotation point
float angle = CalcAngle(Cursor.Position);
dc.RotateTransform(angle); //Rotates the graphics transform
dc.DrawImage(sprite, spritePos);
dc.TranslateTransform((spritePos.X), (spritePos.Y));
当前,您正在将精灵放置在距离原点两倍的位置,然后旋转,然后将其移回原始位置。您应该将其平移到图像的中间:
dc.TranslateTransform(-spritePos.X, -spritePos.Y); //Sets rotation point
float angle = CalcAngle(Cursor.Position);
dc.RotateTransform(angle); //Rotates the graphics transform
dc.DrawImage(sprite, spritePos);
dc.TranslateTransform((spritePos.X), (spritePos.Y));
dc.TranslateTransform(-spritePos.X / 2, -spritePos.Y / 2);
float angle = CalcAngle(Cursor.Position);
dc.RotateTransform(angle); //Rotates the graphics transform
dc.DrawImage(sprite, spritePos);
dc.TranslateTransform((spritePos.X / 2), (spritePos.Y / 2));
Thx的答案,但它并没有真正解决我的问题,它仍然表现出相同的方式