2014-07-27 198 views
1

我在Python中製作一個隨機圖生成器。我正在產生隨機的政治領土。我有一個算法可以爲一系列區域生成X,Y座標列表。這些地區不需要是連續的,所以點的列表可以產生多個多邊形形狀。SVG座標數組多邊形形狀

目前,我將點列表轉換爲路徑字符串,本質上是一條非常長的線條,用於形成一個形狀。並不完全是Path的意圖。這也是非常低效的;如果你有一個特別長的領土,它可以達到幾千字。此外,使用此方法使筆畫屬性基本上像填充屬性一樣,這意味着我無法在區域之間繪製邊框線。

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> 

實際的問題:
我怎麼能點的列表轉換爲一個或多個多邊形?更具體地說,我需要一個多邊形「線」字符串。

回答

1

顯然你的領土生成算法是基於位圖的。你需要的是追蹤形狀的輪廓,而不是像現在這樣通過「行程編碼」形狀來製作SVG。

描述如何做到這一點有點超越S.O.回答。在一般意義上,這被稱爲「位圖追蹤」。一個流行的圖書館是potrace。我認爲它有Python綁定。

否則,您可以利用您的領土算法構建的內部數據結構來做更好的工作(而不是potrace)。

1

這裏是你的SVG形狀目前的樣子:

enter image description here

而非確切的輪廓的解決方案,我建議你可以在較低的分辨率生成地圖,然後用一個marching squares算法轉換到高分辨率矢量格式。