问题:在保持多边形质心的同时,将 n 个像素缓冲区添加到现有多边形(保证是闭合的、不重叠的和顺时针方向的点)。
当前:我有一个包含 System.Drawing Path 和 System.Drawing Region 的 PolyRegion 类。当我实例化该类时,我会将因子缓冲区添加到路径并缩放/转换它。如果相对于质心进行缩放,则结果会发生偏移。
示例:绿色多边形是原始多边形。当我将其缩放 n 倍时,我得到/想要紫色多边形(以质心为中心)。
问题:如何相对于质心进行缩放?我最好缩放点数组中的每个点还是缩放路径/区域?
代码:
public PolyRegion(Int32 Id, List<Point> Points)
{
this.Id = Id;
this.Points = Points;
this.Path = this.CreatePath();
float factor = 10;
float wScale = (float)((this.Path.GetBounds().Width - factor) / this.Path.GetBounds().Width);
float hScale = (float)((this.Path.GetBounds().Height - factor) / this.Path.GetBounds().Height);
Matrix transformMatrix = new Matrix();
transformMatrix.Scale(wScale, hScale);
this.Path.Transform(transformMatrix);
this.Region = new Region(this.Path);
this.Area = CalculateArea();
}