2013-07-29 14 views

risposta

6

Prendere (d, e, f) e sottrarre la proiezione di esso sulla normale normalizzata al piano (nel tuo caso (a, b, c)). Quindi:

v = (d, e, f) 
     - sum((d, e, f) *. (a, b, c)) * (a, b, c)/sum((a, b, c) *. (a, b, c)) 

Qui, da *. intendo i prodotto componente-saggio. Quindi questo significherebbe:

sum([x * y for x, y in zip([d, e, f], [a, b, c])]) 

o

d * a + e * b + f * c 

se si desidera solo per essere chiari, ma pedante

e allo stesso modo per . Così, in Python:

from math import sqrt 

def dot_product(x, y): 
    return sum([x[i] * y[i] for i in range(len(x))]) 

def norm(x): 
    return sqrt(dot_product(x, x)) 

def normalize(x): 
    return [x[i]/norm(x) for i in range(len(x))] 

def project_onto_plane(x, n): 
    d = dot_product(x, n)/norm(n) 
    p = [d * normalize(n)[i] for i in range(len(n))] 
    return [x[i] - p[i] for i in range(len(x))] 

allora si può dire:

p = project_onto_plane([3, 4, 5], [1, 2, 3]) 
+0

*. sembra non essere identificato dal compilatore: SyntaxError: sintassi non valida. Perché? –

+0

@ perfectionm1ng: Perché non è * Python. Ho spiegato come tradurre '* .' in Python. – jason

+0

oh, capisco. Sono un novellino in Python. Potresti mostrarmi il codice per favore? So che lo faccio in matematica. Quello che non so e quindi sto chiedendo è come farlo in codici Python .. –