我有一些代码可以将点从标准坐标系转移到特定坐标系(但在你的情况下,Y 在屏幕上向下增加,因此进行了一些调整并进行了评论)。
这里,double[] 表示一个点,其中索引 0 是 X 坐标,索引 1 是 Y。请注意,新坐标系的角度是逆时针测量的,单位为弧度。(乘以 Pi/180 将度数转换为弧度)。
/// <summary>
/// Implemented - Returns the point coordinates related to a new coordinate system
/// Does not change original point
/// </summary>
/// <param name="Point">Point to be returned in new coordinate system</param>
/// <param name="NewSystemCouterClockRotation">CounterClokWise Angle of rotation of the new coordinate system compared to the current, measured in radians</param>
/// <param name="NewSystemOrigin">Location of the new origin point in the current coordinate system</param>
/// <returns></returns>
public double[] ChangeCoordinateSystem(double[] Point, double NewSystemCouterClockRotation, double[] NewSystemOrigin)
{
//first adjust: fix that winform downwards increasing Y before applying the method
Point[1] = -Point[1];
NewSystemOrigin[1] = -NewSystemOrigin[1]
//end of first adjust
//original method
double[] Displacement = new double[2] { Point[0] - NewSystemOrigin[0], Point[1] - NewSystemOrigin[1] };
double[] Result = new double[2]
{
+ Displacement[0] * Math.Cos(NewSystemCouterClockRotation) + Displacement[1] * Math.Sin(NewSystemCouterClockRotation),
- Displacement[0] * Math.Sin(NewSystemCouterClockRotation) + Displacement[1] * Math.Cos(NewSystemCouterClockRotation)
};
//second adjust: reset Y of the result
Result[1] = - Result[1];
return Result;
}
但是,如果你的两个对象有不同的角度,你应该小心,最好的方法是检查all four corners of the first
第一个矩形是否不在另一个对象内,如果the other object four corners
不在第一个对象内。
可以在此处找到一些确定点是否在多边形内的算法:
Point in polygon