2011-08-14 13 views
6

Jaki byłby najlepszy sposób przybliżenia współczynnika kształtu wypukłego kadłuba w języku Python? Próbowałem już tego dokonać, dopasowując wierzchołki wypukłego kadłuba za pomocą elipsy i przyjmując stosunek osi pół- i wielkiej. Rezultaty nie są zadowalające, więc teraz zastanawiam się nad wyprowadzaniem proporcji bezpośrednio z wypukłego kadłuba. Wszelkie pomysły i rozwiązania będą mile widziane.Szacowanie proporcji wypukłego kadłuba

Cheers

+0

Co masz na myśli z aspektu stosunek w tym kontekście i jak chcesz czerpać go bezpośrednio z wypukłego kadłuba? –

+1

Jak definiujesz współczynnik kształtu wypukłego kadłuba? Czy chcesz zezwalać na różne kąty, aby uzyskać współczynnik kształtu obróconego prostokąta? Jeśli chcesz tylko użyć osi 0 ° i 90 °, współczynnik kształtu jest łatwy do obliczenia. –

+0

Przez 0 i 90 stopni, masz na myśli znalezienie współczynnika kształtu w oparciu o następujące? 1) Znajdź główną oś w wypukłym kadłubie (najdłuższa możliwa droga w wypukłym kadłubie przez środek ciężkości) i 2) zmierz mniejszą oś, która jest ortogonalna do głównej osi. Jeśli tak jest, to powinno działać. – ebressert

Odpowiedz

7

Zazwyczaj, można znaleźć wektorów własnych macierzy kowariancji chmury punktów. Współczynnik kształtu to stosunek największych do najmniejszych wartości własnych.

Jako przykład bandą przypadkowych punktów (tylko chcesz zastosować to samo do wypukłej, używając tylko wierzchołki):

import matplotlib.pyplot as plt 
import numpy as np 

# Random data 
num = 100 
xy = np.random.random((2,num)) + 0.01 * np.arange(num) 

eigvals, eigvecs = np.linalg.eig(np.cov(xy)) 

fig, (ax1, ax2) = plt.subplots(nrows=2) 
x,y = xy 
center = xy.mean(axis=-1) 
for ax in [ax1, ax2]: 
    ax.plot(x,y, 'ro') 
    ax.axis('equal') 

for val, vec in zip(eigvals, eigvecs.T): 
    val *= 2 
    x,y = np.vstack((center + val * vec, center, center - val * vec)).T 
    ax2.plot(x,y, 'b-', lw=3) 

plt.show() 

enter image description here

+0

To jest dobre rozwiązanie. Nadal testuję ten kod na moich danych, ale jak na razie wyniki są dobre. Dzięki! – ebressert

Powiązane problemy