将多边形缩小为TPoint阵列?

时间:2012-05-07 01:10:13

标签: delphi drawing delphi-xe2 gradient polygon

我正在使用TCanvas.Polygon()并且想知道如何缩小多边形的大小,或者如果已经有一个函数,或者如何编写一个。我有一个声明TPoints: Array of TPoint;的类型,并在调用TCanvas.Polygon()时使用它。

问题是,如果我必须编写这个函数,它如何识别每个点需要移动的方向(基于与多边形其余部分的比例)?

例如,如果我创建了一个点数组(TPoints)来表示一个5角星,我需要将它缩小2个像素,它将如何知道移动点的方向?

最终目的是为多边形实现渐变。将有一个循环来执行此操作,其中a)颜色稍微调整,b)多边形点需要收缩几个像素,并且c)多边形被绘制(小于先前绘制的多边形) );因此,创建一个渐变。

2 个答案:

答案 0 :(得分:16)

在我看来,您正在寻找一种方法来进行多边形偏移 - 按指定数量的单位(像素)缩小或扩展多边形。我的Clipper Library(用Delphi,C ++和C#编写)进行多边形偏移。点移动的方向' (即缩小或扩大)将取决于所提供的三角洲的标志(正面与负面)。 OffsetPolygons函数的参数。

答案 1 :(得分:0)

处理这个问题的“经典”方法是“变换矩阵”:

由于您似乎正在使用Delphi XE2,您是否看过Firemonkey?我相信二维变换是图书馆的标准部分: