newer 发表于 2025-1-9 18:34:12

生成泰森多边形


Voronoi 图(泰森多边形)的属性:

唯一且不重叠的区域:
每个区域对应一个生成点,并且没有两个区域重叠。边界由连接相邻点的线的垂直平分线定义。

最近点属性:
Voronoi 单元内的每个点都比任何其他点更接近其生成点。

凸性:
如果生成点处于一般位置(没有三个点共线),则 Voronoi 单元是凸多边形。

对加权系统的适应性:
Voronoi 图可以扩展到加权系统,从而产生功率图或乘法加权 Voronoi 图。

动态特性:
如果生成点的位置发生变化,则图会动态变化。

Voronoi 图的应用:

地理空间分析:
用于地理学中根据与兴趣点的接近度划分区域,例如在油井或服务中心之间划分土地。

寻路和机器人技术:
通过确定安全区域或最短路径,帮助避障和路径规划。

资源分配:
用于规划仓库、医院或手机信号塔等设施的最佳位置,以尽量缩短服务距离。

气象学和水文学:
帮助插入和分析空间数据,如降雨分布或流域制图。

计算几何:
构成网格生成、最近邻搜索和聚类算法的基础。

生物学和生态学:
模拟细胞结构、动物领地或资源竞争区。

图像处理和图形:
用于纹理合成、图像分割和创建 Voronoi 艺术等艺术效果。

游戏开发:
用于虚拟环境中地形或区域的程序生成。






(defun c:tt ()
(and (setq ss      (xdrx-ssget
                  (xdrx-string-multilanguage
                  "\n选择点对象<退出>:"
                  "\nSelect point object <exit>:"
                  )
                  '((0 . "point"))
                )
       )
       (setq pl      (xdrx-entsel
                  (xdrx-string-multilanguage
                  "\n选择外边界<退出>:"
                  "\nSelect outer boundary <exit>:"
                  )
                  '((-4 . "<and")
                  (0 . "*polyline")
                  (-4 . "&=")
                  (70 . 1)
                  (-4 . "and>")
                   )
                )
       )
       (xdrx-points->voronoi ss pl t)
)
(princ)
)



(defun c:tt1 ()
(if (and (setq ss (xdrx-ssget
                      (xdrx-string-multilanguage
                        "\n选择点对象<退出>:"
                        "\nSelect point object <exit>:"
                      )
                      '((0 . "point"))
                  )
         )
         (setq pl (xdrx-entsel
                      (xdrx-string-multilanguage
                        "\n选择外边界<退出>:"
                        "\nSelect outer boundary <exit>:"
                      )
                      '((-4 . "<and")
                        (0 . "*polyline")
                        (-4 . "&=")
                        (70 . 1)
                        (-4 . "and>")
                     )
                  )
         )
         (setq polygon (xdrx-points->voronoi ss pl))
      )
    (progn
      (xdrx-begin)
      (xdrx-entity-delete ss)
      (xdrx-sysvar-push '("pdmode" 99 "pdsize" 10))
      (foreach m polygon
      (setq bound (car m)
            pnt   (cadr m)
            clr   (xdrx-math-rand 0 100)
      )
      (xdrx-point-make pnt)
      (xdrx-setpropertyvalue (entlast) "color" clr)
      (xdrx-polyline-make bound t)
      (xdrx-setpropertyvalue (entlast) "color" clr)
      )
      (xdrx-sysvar-pop)
      (xdrx-end)
    )
)
(princ)
)



页: [1]
查看完整版本: 生成泰森多边形