Delphi 将多边形收缩为TPoint数组?

Delphi 将多边形收缩为TPoint数组?,delphi,drawing,delphi-xe2,gradient,polygon,Delphi,Drawing,Delphi Xe2,Gradient,Polygon,我正在使用TCanvas.Polygon(),我想知道如何缩小多边形的大小,如果已经有用于此的函数,或者如何编写函数。我声明了一个类型TPoints:TPoint的数组并在调用TCanvas.Polygon()时使用它 问题是,如果我必须编写这个函数,它如何识别每个点需要移动的方向(基于与多边形其余部分的比例) 例如,如果我制作了一个点阵列(TPoints)来表示一个5点星,并且我需要将其缩小2个像素,它如何知道移动点的方向 最终目的是为多边形实现渐变。将有一个循环来执行此操作,其中a)稍微调整

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

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

例如,如果我制作了一个点阵列(
TPoints
)来表示一个5点星,并且我需要将其缩小2个像素,它如何知道移动点的方向

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

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

因为您似乎正在使用Delphi XE2,所以您看过Firemonkey吗?我认为二维变换是库的标准部分:


在我看来,您正在寻找一种进行多边形偏移的方法—按指定的单位(像素)缩小或扩展多边形。我的(用Delphi,C++和C语言编写)进行多边形偏移。“点移动方向”(即收缩或扩展)将取决于提供给函数的“增量”参数的符号(正vs负)

很高兴知道这一点,但最好是一个Delphi示例。还有一个问题是,
t点
是整数,而不是小数(这意味着很难精确计算)。另外,使用Firemonkey意味着我所做的一切都是Firemonkey,在这种情况下这是不可行的。你是指VCL示例?(Firemonkey仍然是delphi!)@WarrenP是的,是的,我没有正确地说出来,事实上,在公认的答案中,这个单元
clipper.pas
不依赖VCL,因此也可以在FMX中使用:DSweet。我从没听说过这个,现在我得试试!