4

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

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

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

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

4

2 回答 2

16

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

于 2012-05-07T04:23:37.463 回答
0

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

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

于 2012-05-07T01:18:31.547 回答