wpf 偏移矩形位置,使其始终有一部分沿着圆周接触

bgibtngc  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(150)

嗨,我有一个对象,我的位置沿着边缘的一个圆圈。我已经实现了这一点与下面的代码。

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;
        }

我遇到的问题是对象有不同的宽度和高度,它需要在圆的内部,所以我不能使用对象的中心点来放置它。它总是需要与矩形的一部分接触圆的内部。

所以问题是如何应用偏移量来对坐标进行加减运算。
抱歉,如果这没有意义的话,我很难想出如何用词来表达这一点。我会尽我所能回答任何问题。

kmpatx3s

kmpatx3s1#

假设有一个α角,圆的半径为R,圆心为(0,0),矩形的圆心与圆心的距离为r(未知变量),再假设矩形的半宽为w,半高为h,则构成矩形的4个点的坐标为:

x = r * cos(alpha) + w, y = r * sin(alpha) + h
x = r * cos(alpha) - w, y = r * sin(alpha) + h
x = r * cos(alpha) + w, y = r * sin(alpha) - h
x = r * cos(alpha) - w, y = r * sin(alpha) - h

您只需要检查每个点的方程x² + y² = R²,得到变量为r的二次方程。

相关问题