【发布时间】:2018-04-10 07:07:49
【问题描述】:
我正在尝试创建一个使用不常见的多边形渐变填充的应用程序。这个想法是多边形的每个边缘都有一种颜色,这些边缘颜色用于以平滑渐变填充多边形的其余像素。
我有一个工作程序,它通过确定每个像素与所有多边形边缘的距离并根据到它们的距离对所有边缘的颜色进行加权平均来执行此渐变。这是一个示例输出:
问题在于,当多边形有很多边时,算法非常慢,也就是说,因为对于每个像素,它必须计算到每个边的距离。关于如何加快速度的任何想法?
当前算法:
for pixel in polygon: # predetermined using a basic scan-line polygon-fill algorithm
edge_distances = {}
for edge in polygon:
distance = calc_point_to_line_distance(pixel, edge) # simple formula, constant time
edge_distances[edge] = distance
colour = calc_pixel_colour(edge_distances) # runs in O(num_edges) time
set_pixel_colour(pixel, colour)
我省略了细节,因为我正在寻找如何更好地做到这一点的大局想法(即比 O(num_pixels*num_edges) 更好)。欢迎所有想法。
谢谢!
【问题讨论】:
-
很难优化我们看不到的算法。如果你需要帮助,你将不得不分享一些代码。
-
上面添加的伪代码。
-
你需要支持凹多边形,还是只支持凸多边形?
-
凹多边形,以及带孔的多边形。
标签: algorithm graphics polygon gradient