Domanda

C'è anche una cosa del genere come baricentro di un 3D? Permettetemi di essere perfettamente chiaro-Ive stato lettura e lettura circa centroidi per gli ultimi 2 giorni, sia su questo sito e sul Web, quindi sono perfettamente consapevole ai posti esistenti sul tema, tra cui Wikipedia

Detto questo, lasciatemi spiegare quello che sto cercando di fare. Fondamentalmente, io voglio prendere una selezione di bordi e / o vertici, ma NON volti. Poi, voglio mettere un oggetto nella posizione baricentro 3D.

ti dirò quello che non voglio:

  • I vertici media, che tirare troppo in qualsiasi direzione che ha una maglia più alta dettagliata.
  • Il centro riquadro di delimitazione, perché ho già qualcosa di lavoro per questo scenario.

Sono aperto a suggerimenti su centro di massa, ma non vedo come questo possa funzionare, perché i vertici o spigoli da sole non definiscono alcun tipo di massa, soprattutto quando devo solo un ciclo bordo selezionato.

Per i calci, ti faccio vedere un po ' PyMEL che ho lavorato su, utilizzando @ codice di Emile come riferimento, ma non credo che sta funzionando come dovrebbe:

from pymel.core import ls, spaceLocator
from pymel.core.datatypes import Vector
from pymel.core.nodetypes import NurbsCurve

def get_centroid(node):
    if not isinstance(node, NurbsCurve):
        raise TypeError("Requires NurbsCurve.")
    centroid = Vector(0, 0, 0)
    signed_area = 0.0
    cvs = node.getCVs(space='world')
    v0 = cvs[len(cvs) - 1]
    for i, cv in enumerate(cvs[:-1]):
        v1 = cv
        a = v0.x * v1.y - v1.x * v0.y
        signed_area += a
        centroid += sum([v0, v1]) * a
        v0 = v1
    signed_area *= 0.5
    centroid /= 6 * signed_area
    return centroid

texas = ls(selection=True)[0]
centroid = get_centroid(texas)
print(centroid)
spaceLocator(position=centroid)
È stato utile?

Soluzione

In teoria centroid = SUM(pos*volume)/SUM(volume) quando si divide la parte in volumi finiti ciascuna con una posizione pos e il valore del volume volume.

Questo è precisamente il calcolo fatto per trovare il centro di gravità di una parte composita.

Altri suggerimenti

Non è solo un 3D baricentro, c'è un baricentro n-dimensionale, e la formula perché è stato dato nella sezione "dalla formula integrale" di questo articolo Wikipedia lei cita.

Forse si stanno avendo problemi impostazione questa integrale? Non hai definito la forma.

[Modifica] io manzo su questa risposta in risposta al tuo commento. Dal momento che avete descritto la forma in termini di spigoli e vertici, quindi darò per scontato che è un poliedro . È possibile partizionare un polyedron in piramidi, a trovare i baricentri delle piramidi, e quindi il baricentro della vostra forma è il baricentro dei baricentri (quest'ultimo calcolo viene effettuato usando la formula di ja72).

Si assume la forma è convessa (senza parti cave --- se questo non è il caso allora romperlo in pezzi convesse). Si può suddividere in piramidi (triangolare esso) selezionando un punto al suo interno e disegnando bordi ai vertici. Poi ogni faccia della forma è la base di una piramide. Ci sono formule per il baricentro di una piramide (si può guardare questo in su, è il modo in cui 1/4 dal baricentro della faccia al vostro punto interno). Poi, come è stato detto, il baricentro della vostra forma è il baricentro dei baricentri --- calcolo finito di ja72, non un integrale --- come indicato nel altra risposta.

Questo è lo stesso algoritmo come nella risposta di Hugh Bothwell, tuttavia credo che 1/4 è corretto invece di 1/3. Forse si può trovare qualche codice per esso in agguato da qualche parte utilizzando i termini di ricerca in questa descrizione.

mi piace la questione. Centro di massa suona bene, ma la questione diventa allora, che la massa per ogni vertice?

Perché non usare la durata media di ogni bordo che include il vertice? Questo dovrebbe compensare bene aree con una maglia fitta.

Si dovrà informazioni faccia ricreare dai vertici (in sostanza, una triangolazione Delauney).

Se i vertici definiscono un guscio convesso, si può scegliere qualsiasi punto A arbitrario all'interno dell'oggetto. Trattare l'oggetto come un insieme di prismi piramidali aventi vertice A e ogni faccia come base.

Per ogni faccia, trovare l'area Fa e il baricentro 2d Fc; quindi la massa del prisma è proporzionale al volume (== 1/3 di base * altezza (componente di Fc-A perpendicolare alla faccia)) e si può ignorare la costante di proporzionalità fintanto che lo stesso per tutti i prismi; il centro di massa è (2/3 + 1/3 A Fc), o un terzo della dall'apice al centroide 2d della base.

E 'possibile poi fare un media di massa ponderata dei punti di centro-di-massa per trovare il baricentro 3D dell'oggetto nel suo complesso.

Lo stesso processo dovrebbe lavoro per scafi non convesse - o anche per un fuori dello scafo - ma la faccia-calcolo può costituire un problema; sarà necessario essere attenti circa la prepotenza dei volti.

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