Autor Wątek: Obliczenie obwodu dowolnej bryły3D  (Przeczytany 1990 razy)

Offline angustil

  • Użytkownik

# Listopad 12, 2012, 11:33:05
Hej
Znacie może jakieś szybkie metody do obliczenia obwodu dowolnej bryły3D ?
Jedyne co mi przychodzi na myśl to przecięcie bryły płaszczyzną, wyznaczenie punktów przecięcia i z tych punktów poskładania spline a następnie wyliczenie długości tej krzywej.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 12, 2012, 11:34:09
A to od kiedy bryła 3D ma obwód? :)

Offline angustil

  • Użytkownik

# Listopad 12, 2012, 11:35:53
Chodzi o wyliczenie obwodu przekroju może w ten sposób :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 12, 2012, 11:54:27
A w jakiej postaci masz zadaną bryłę?

Offline angustil

  • Użytkownik

# Listopad 12, 2012, 12:47:26
Mam taką bryłę:


Przecinam ją płaszczyzną:


Te zielone kropki to punkty przecięcia które muszę wyznaczyć a następnie chyba rzutować te punkty na tą płaszczyzną i w jakiś sposób wyliczyć obwód w tym miejscu przecięcia.

Offline bartekm

  • Użytkownik
    • Wordpress Blog

# Listopad 12, 2012, 13:01:45
Ciężka sprawa, gdyby to była bryła parametryczna to jeszcze jakoś by się dało policzyć. W tym wypadku jedyne co mi przychodzi do głowy to polyczyć przecięcie płaszczyzny i każdego trójkąta, wyznaczyć odcinek takiego przecięcia i zsumować go dla wszystkich przecięć co da obwód.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 12, 2012, 13:02:53
Dla każdego trójkąta bryły wyznaczasz jego przecięcie z płaszczyzną i sumujesz długości tych odcinków. I tyle. :)

Cytuj
Ciężka sprawa, gdyby to była bryła parametryczna to jeszcze jakoś by się dało policzyć. W tym wypadku jedyne co mi przychodzi do głowy to polyczyć przecięcie płaszczyzny i każdego trójkąta, wyznaczyć odcinek takiego przecięcia i zsumować go dla wszystkich przecięć co da obwód.
Gdyby to była bryła parametryczna do wtedy by była ciężka sprawa. A tak jest to wręcz banalne. :)

Offline angustil

  • Użytkownik

# Listopad 12, 2012, 13:27:21
Czyli wystarczy dla każdego trójkąta sprawdzić czy krawędź przecina płaszczyznę ? i w ten sposób wyznaczyć punkt przecięcia ?

Offline bartekm

  • Użytkownik
    • Wordpress Blog

# Listopad 12, 2012, 13:45:40
Można i tak. Dla każdej krawędzi trójkąta zrób test płaszczyzna-krawędź i policz punkt przecięcia. Musisz wyznaczyć dwa takie punkty, żeby otrzymać odcinek potrzebny do obliczenia obwodu.

Offline koirat

  • Użytkownik

# Listopad 12, 2012, 19:55:04
Zacznij od wyeliminowania wszystkich trójkątów które posiadają wszystkie swoje wierzchołki tylko po jednej stronie płaszczyzny.

I musisz jakoś rozwiązać problem wierzchołków znajdujących się na płaszczyźnie.

Poza tym to napisz jak ci się uda zrobić ten algorytm, bo chce się upewnić czy mam rację - że ci się to nie uda.
Choć szczerze życzę powodzenia.

Offline zephyr

  • Użytkownik

# Listopad 13, 2012, 03:41:11
Jeśli bryła ma być dowolna to ten zbiór punktów warto potraktować potem szukaniem otoczki wypukłej, bo inaczej punkty wewnątrz mogą być problematyczne (i przy otoczce wypukłej trudniej będzie policzyć 2 razy jakąś krawędź). Chyba że faktycznie mają być te wklęsłości policzone, wtedy trzeba znajdować odcinki czyli przecięcia trójkątów z płaszczyzną i zsumować ich długość (uważając żeby jak krawędź trójkąta wypadnie na płaszczyźnie nie policzyć jej 2 razy, jak wypadnie sam wierzchołek na płaszczyźnie to odcinek i tak ma długość 0) Zależy co dokładnie liczysz i po co.

Pytanie też jak taka bryła wklęsła ma być liczona kiedy przecięcie bryły z płaszczyzną będzie figurą z otworem wewnątrz.

Jakaś fajna strukturka do brył, która wie które trójkąty są przyległe i może po nich iterować może usprawnić wyznaczanie tego przecięcia. Ale przejście po wszystkich trójkątach przy względnie małej ich ilości też nie brzmi źle, zwłaszcza że można pociąć większe bryły na części i zrobić wcześniej test dla których części liczyć.
« Ostatnia zmiana: Listopad 13, 2012, 03:43:25 wysłana przez zephyr »