1 votos

Calcular la posición del vector

Intento calcular y mover los vértices a su "radio" medio y formar un círculo a partir de estas nuevas posiciones.

Ejemplo: Tengo 8 vértices seleccionados, tengo un pequeño script en Maya que iterará a través de cada punto, encontrará la distancia desde el centro de la selección hasta el punto actual en el bucle. Guarda estos valores y crea un valor de "distancia media desde el centro".

enter image description here

  • Negro = Posición de cada vértice (X,Y,Z)
  • Rojo = Distancia entre el centro y el vértice
  • Azul = Promedio de TODOS los vértices desde el Punto Central (X,Y,Z) & Vértice (X,Y,Z) = integerXYZ (azul es la misma distancia)
  • Verde es la posición que intento encontrar en (XYZ)

No sé cómo calcular las coordenadas (X,Y,Z) del punto verde.

He calculado esta información con: (hasta la posición de los puntos verdes):

import maya.cmds as cmds
import math
sel = cmds.ls(sl=1, fl=1)
averageDistance = 0
cmds.setToolTo('Move')
oldCoordArray = []
oldDistanceArray = []
newXPos = 0
cs = cmds.manipMoveContext("Move", q=1, p=1)
for i in range(0, len(sel), 1):
    vts = cmds.xform(sel[i],q=1,ws=1,t=1)
    print vts
    x = round(float(cs[0]),2) - round(float(vts[0]),2)
    y = round(float(cs[1]),2) - round(float(vts[1]),2)
    z = round(float(cs[2]),2) - round(float(vts[2]),2)
    distanceFromCenter = math.sqrt((x * x) + (y * y) + (z * z))
    oldCoordArray += [(round(float(vts[0]),2),round(float(vts[1]),2),round(float(vts[2]),2))]
    oldDistanceArray += [(distanceFromCenter)]
    averageDistance += distanceFromCenter    
    if (i == len(sel) -1):
        averageDistance /= len(sel)
        print 'average Distance: %s' %averageDistance
        for i in range(0, len(sel), 1):
            #Calculate percentage difference between distances
            t = oldDistanceArray[i] * 100 / averageDistance
            percDiff = (t / 100) * oldCoordArray[i][0]
            newXPos -= (oldCoordArray[i][0] / percDiff) * 100     

(imagen original ici )

1voto

Shabaz Puntos 403

Si lo he entendido bien, has pasado por los ocho puntos $(X_i,Y_i,Z_i)$ y se promedió el $X,Y,Z$ para encontrar las coordenadas rojas, llámelas $(X_c,Y_c,Z_c)$ La distancia de cada punto al centro es $d_i=\sqrt{(X_i-X_c)^2+(Y_i-Y_c)^2+(Z_i-Z_c)^2}$ . Si se hace una media de todos los $d_i$ los segmentos azules se extenderán más allá de los puntos más cercanos. No me queda claro cómo se elige la longitud azul $b$ . Pero lo hagas como lo hagas, las coordenadas de los puntos verdes $g_i=\left(\frac b{d_i}(X_i-X_c)+X_c,\frac b{d_i}(Y_i-Y_c)+Y_c,\frac b{d_i}(Z_i-Z_c)+Z_c\right)$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X