2011-11-02 20 views
19

Bir eğri oluşturan noktaların bir listesini aldım ve nokta sayısını azaltmak istiyorum, ancak yine de eğrinin genel şeklini korumak istiyorum.Genel şeklini korurken bir eğrideki nokta sayısını nasıl azaltabilirim?

Temelde, bu gitmek istiyorum:

enter image description here

Bu Kime:

enter image description here

Yani algoritması gereksiz noktaları kaldırmak ama gerçekten belirleyecileri de koruyacak şekil (eğrinin altındaki noktalar gibi). Bunu yapmak için bilinen herhangi bir algoritma var mı? Olduğunu tahmin ediyorum, ancak Google'da ne arayacağımı bilmiyorum. Herhangi bir yardım takdir edilecektir.

+5

düşünün, ama biz genellikle 'köşe decimation' olarak bu sürece bakın. Belki bu sizin Googling'inize yardımcı olacaktır. –

cevap

23

sana verilecek algoritmalar yok Douglas–Peucker_algorithm

enter image description here

+0

Teşekkürler, harika çalışan Douglas – Peucker algoritmasını kullanarak bitirdim. –

+1

@ this.lau_ Uygulamanızı bu algoritma için lütfen paylaşabilir misiniz? – EmptyData

13

Bunun için çeşitli algoritmalar vardır.

En basit olanı, komşu noktalar arasındaki açıyı 180 dereceye en yakın olan noktayı kaldırmaya çalışmaktır, ancak bazı eşiklere kadar veya istediğiniz sayıda noktaya ulaşıncaya kadar.

Eğri resimdeki gibi düzgünse, örneğin Bezier eğrilerini kullanarak muhtemelen daha iyi yaklaşımlar (veya isterseniz daha az puan) elde edersiniz.

+0

Teşekkürler, ama ilk öneri benim için işe yaramayacağını düşünüyorum çünkü verilerim örnekte olduğu gibi temiz değil. Birbirine çok yakın olan küçük noktalar olabilir, bu da açıya bakmaksızın tek bir noktaya indirilmelidir. Bir Bezier eğrisi kullanmak, sorunu basitleştirmek yerine sorunu daha karmaşık hale getirebilir ve oluşturma işlemini yavaşlatır. –

İlgili konular