嗨,我有一个对象,我的位置沿着边缘的一个圆圈。我已经实现了这一点与下面的代码。
private Point GetPosNew(double degrees, double radius)
{
double Radains = Deg2Rad(degrees - 90);
Point coords;
if (degrees == 0)
{
coords.Y -= radius;
}
else if (degrees == 90)
{
coords.X += radius;
}
else if (degrees == 180)
{
coords.Y += radius;
}
else if (degrees == 270)
{
coords.X -= radius;
}
else
{
if (degrees > 0 && degrees < 90)
{
coords.X += radius * Math.Sin(Deg2Rad(degrees));
coords.Y -= radius * Math.Cos(Deg2Rad(degrees));
}
else if (degrees > 90 && degrees < 180)
{
coords.X += radius * Math.Cos(Deg2Rad(degrees-90));
coords.Y += radius * Math.Sin(Deg2Rad(degrees-90));
}
else if (degrees > 180 && degrees < 270)
{
coords.X -= radius * Math.Sin(Deg2Rad(degrees-180));
coords.Y += radius * Math.Cos(Deg2Rad(degrees-180));
}
else if (degrees > 270 && degrees < 360)
{
coords.X -= radius * Math.Cos(Deg2Rad(degrees-270));
coords.Y -= radius * Math.Sin(Deg2Rad(degrees-270));
}
}
return coords;
}
我遇到的问题是对象有不同的宽度和高度,它需要在圆的内部,所以我不能使用对象的中心点来放置它。它总是需要与矩形的一部分接触圆的内部。
所以问题是如何应用偏移量来对坐标进行加减运算。
抱歉,如果这没有意义的话,我很难想出如何用词来表达这一点。我会尽我所能回答任何问题。
1条答案
按热度按时间kmpatx3s1#
假设有一个α角,圆的半径为R,圆心为(0,0),矩形的圆心与圆心的距离为r(未知变量),再假设矩形的半宽为w,半高为h,则构成矩形的4个点的坐标为:
您只需要检查每个点的方程
x² + y² = R²
,得到变量为r
的二次方程。