我在Python中制作一个随机地图生成器。我正在产生随机的政治领土。我有一个算法,生成一个领土列表的X,Y坐标列表。这些区域不需要是连续的,因此点列表可以生成多个多边形形状。
目前,我将点列表转换为路径字符串,基本上是一个很长的线,它包裹着形成一个形状。不完全是Path的目的。它的效率也非常低;如果你有一个特别长的领土,它可以长达几千个字符。此外,使用此方法会使stroke属性基本上像fill属性一样,这意味着我无法在区域之间绘制边界线。
Here's an example of what I'm doing now:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="512" height="512">
<path d="M 332 263 H 346 M 331 264 H 347 M 330 265 H 348 M 329 266 H 349 M 328 267 H 350 M 327 268 H 351 M 326 269 H 352 M 325 270 H 364 M 324 271 H 365 M 323 272 H 366 M 322 273 H 367 M 321 274 H 368 M 320 275 H 369 M 319 276 H 370 M 318 277 H 371 M 317 278 H 372 M 317 279 L 317 279 M 319 279 M 322 279 H 373 M 318 280 L 318 280 M 323 280 H 374 M 317 281 L 317 281 M 324 281 H 375 M 322 282 L 322 282 M 324 282 H 376 M 320 283 H 376 M 321 284 H 376 M 321 285 H 323 M 325 285 H 330 M 333 285 M 340 285 H 375 M 323 286 H 324 M 326 286 H 328 M 342 286 H 371 M 373 286 H 374 M 325 287 L 325 287 M 327 287 M 345 287 H 373 M 346 288 H 372 M 345 289 H 372 M 346 290 H 369 M 372 290 M 375 290 M 345 291 H 368 M 371 291 M 374 291 H 377 M 345 292 H 368 M 374 292 H 375 M 344 293 H 367 M 344 294 H 363 M 365 294 M 343 295 H 362 M 344 296 H 363 M 343 297 H 363 M 345 298 H 363 M 345 299 H 363 M 345 300 H 363 M 345 301 H 361 M 344 302 H 361 M 345 303 H 361 M 346 304 H 357 M 347 305 H 356 M 350 306 H 351 M 354 306 M 356 306" stroke="rgb(252, 81, 193)">
</path>
</svg>
实际问题:
如何将点列表转换为一个或多个多边形?更具体地说,我需要一个多边形&#34;线&#34;字符串。
答案 0 :(得分:1)
显然,您的区域生成算法基于位图。你需要的是跟踪形状的轮廓,而不是像现在一样通过“游程编码”形状来制作SVG。
描述如何做到这一点有点超越S.O.回答。在一般意义上,这称为“位图跟踪”。一个受欢迎的库是potrace
。我认为它有python绑定。
否则,通过利用领土算法构建的内部数据结构,您可以做得更好(而不是potrace)。
答案 1 :(得分:1)