3
繁星点点的代码挑战
美利坚合众国的国旗在其州内包含50个星星,代表50个州。 过去,当州数减少时,当然会有更少的星星,而且它们的排列方式也有所不同。例如,从1912-1959年(在新墨西哥州和亚利桑那州进入之后,但在阿拉斯加之前),有48个6×8矩形排列的恒星。 1867-1877年(内布拉斯加州入场后,科罗拉多州之前)使用的37星旗帜具有不对称的星型。 万一将来增加第51个州,陆军纹章学院已经为新国旗开发了初步设计。 但是,没有用于排列星星的通用算法,所以让我们做一个吧! 挑战 编写一个程序,将给定数量的星星放置在美国国旗的州(蓝色部分)中,输出放置这些星星的最佳坐标。 坐标系由0≤x≤W和0≤y≤H 的州(而不是整个标记)定义。 出于这一挑战的目的,“最佳”布置被定义为使州中一个点与最近的恒星中心之间的平均(欧几里得)距离最小化的布置。 一个简单的(如果可能不是最优的)算法来近似该值是: def mean_distance_to_nearest_star(stars, width, height, point_density=100): """ Approximate the mean distance between a point in the rectangle 0 < x < width and 0 < y < height, and the nearest point in stars. stars -- list of (x, y) …