Come devo creare un algoritmo per il baricentro di qualsiasi oggetto System.Windows.Media.Geometry?

StackOverflow https://stackoverflow.com/questions/1324544

Domanda

Ho intenzione di dover dividere l'oggetto Geometry in una serie di forme più semplici, e combinare i loro baricentri utilizzando questa formula:

dettagli matematici di questa formula può essere trovato in questo articolo Wikipedia .

NOTA: Non essere sorpreso se la mia vista della matematica non è corretto. Non ho fatto alcun matematica complessa passato la trigonometria, e non ho mai avuto a che fare con le lettere greche. Credo di capire questo uno abbastanza bene, ma per favore fatemi sapere se ho sbagliato.

Una nota informativa : il baricentro di una forma GOMETRIC o prisma non è solo la metà della forma. E 'il centro di gravità, o di centro di massa. Suppongo che gli oggetti geometria può incapsulare prismi 3D pure, così che io possa avere a tenerne conto in futuro, ma per ora mi sto concentrando solo su 2D geometrie. Per una forma 2D bisogna immaginare essere un pezzo di carta rigida con una data forma e il centroide sarebbe il punto in cui questo pezzo di carta sarebbe equilibrio su un ago.

Il primo problema che sto affrontando è che ho bisogno di trovare un modo per dividere con precisione un determinato oggetto Geometry in forme semplici, abbastanza, quindi questa formula può funzionare correttamente. Qualcuno ha qualche idea di come questo potrebbe essere realizzato? O c'è una procedura migliore che continuerà a funzionare universalmente?

Il secondo problema che sto affrontando è che dopo la geometria contempla, come posso fare per trovare il baricentro di ogni pezzo? Ogni tipo di forma semplice (triangolo, quadrilatero, semicerchio, ecc) ha il proprio baricentro formula. C'è un modo per me di capire che tipo di forma ogni pezzo è?

È stato utile?

Soluzione

Tesselation o discretizzazione di forme piane 2D arbitrarie è un problema comune in analisi degli elementi finiti. E 'comunemente fatto con triangoli planari o quadrilateri. Provare una ricerca su Google su " 2d finiti generazione elemento mesh "o quadtree o octree generazione mesh. È possibile calcolare il baricentro di ogni forma semplice e applicare la (corretta) formula che hai citato.

questo . O questi . Avresti per fornire la geometria prima per il corpo in questione, ovviamente.

Hai una lunga fila a zappare ancora. Dovrete fare tutti i seguenti:

  1. Trova un programma automatico di meshing e imparare come immettere la geometria per la tua forma 2D.
  2. Eseguire il mesher automatico e ottenere un'uscita maglia che consisterà di tutti i punti 2D nello spazio e connettività di tutti gli elementi triangolari e quadrilateri.
  3. Scrivi un programma per leggere nella maglia e calcolare l'area e baricentro di ogni elemento.
  4. Inserire questi valori nella formula hai citato per calcolare il baricentro della vostra forma 2D originale. Ciò significa loop su tutti gli elementi e accumulare i settori Un i prodotti della (x, y) coordinate di ciascun elemento baricentro e la sua area.
  5. Una volta che avete una risposta, è necessario verificare la convergenza. A tale scopo, perfezionare la rete, rendendo gli elementi più piccoli e il ricalcolo. Lo sai che hai convergente quando si perfezionare la maglia e le risposte di cambiare da meno di una piccola di tolleranza (5% o qualsiasi altra cosa si è disposti a tollerare).

E 'ancora una buona dose di lavoro.

UPDATE: Questo sembra abbastanza buono, ed è open source .

Altri suggerimenti

Non ho alcun codice per questo, ma ho visto in cui la forma è stata Tesselated (in questo caso utilizzando poligono triangolazione ) in modo si avrebbe un bel set di triangoli. Poi calcolare il baricentro combinata basata sulla media ponderata dei baricentro triangoli.

EDIT:

C'è un blog dai ragazzi che lavorano su un prodotto chiamato Insight3D da AGI. In questo , si parla di triangolazione. Potrebbe aiutare a farlo dal momento che fanno dare qualche indicazioni su algoritmi. A seconda del vostro uso, potrebbe essere in grado di riutilizzare uno del loro implementazioni . E 'gratuito per lo sviluppo e l'utilizzo non commerciale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top