Domanda

Ho una domanda so una linea So solo la sua pendenza (m) e un punto su di esso A (x, y) Come posso calcolare i punti (in realtà due di loro) su questa linea con una distanza (d ) dal punto A ??? I m chiedendo questo per reperire intensità dei pixel su una linea che passa attraverso A (x, y) con una distanza .Distance in questo caso sarà numero di pixel.

È stato utile?

Soluzione

Vorrei suggerire convertire la linea in un formato parametrica invece di point-pendio. Cioè, una funzione parametrica per la linea ritorna punti lungo quella linea per il valore di alcuni parametri t. È possibile rappresentare la linea come punto di riferimento, e un vettore che rappresenta la direzione della linea passa attraverso tale punto. In questo modo, basta viaggiare unità d avanti e indietro dal punto A per ottenere il vostro altri punti.

Dal momento che la linea ha pendenza m, la sua direzione vettore è <1, m>. Poiché sposta m pixel in y per ogni 1 pixel x. Si vuole normalizzare quella direzione vettore di essere unità di lunghezza in modo da dividere per il modulo del vettore.

    magnitude = (1^2 + m^2)^(1/2)

    N = <1, m> / magnitude = <1 / magnitude, m / magnitude>

La direzione vettore normalizzato è N. Ora si è quasi fatto. Hai solo bisogno di scrivere l'equazione per la vostra linea in formato con parametri:

    f(t) = A + t*N

Questo utilizza matematica vettoriale . Specificamente, scalare vettoriale moltiplicazione (del parametro t ed il vettore N) e somma vettoriale (di A e t * N). Il risultato della funzione f è un punto lungo la linea. I 2 punti che state cercando sono f (d) ef (-d). Implementare che nella lingua di vostra scelta.

Il vantaggio di utilizzare questo metodo, a differenza di tutte le altre risposte finora, è che si può facilmente estendere questo metodo per sostenere una linea con pendenza "infinito". Vale a dire, una linea verticale come x = 3. Non si ha realmente bisogno il pendio, tutto ciò che serve è il vettore di direzione normalizzato. Per una linea verticale, è <0, 1>. Questo è il motivo per cui le operazioni grafiche utilizzano spesso matematica vettoriale, perché i calcoli sono più diretto e meno incline a singolarità. Può sembrare un po 'complicato in un primo momento, ma una volta a ottenere il blocco delle operazioni vettoriali, un sacco di computer grafica compiti diventano molto più facile.

Altri suggerimenti

mi spiego la risposta in modo semplice .

punto Start - (x0, y0)

Punto finale - (x1, y1)

Abbiamo bisogno di trovare un punto alla (xt, yt) dt distanza dal punto di partenza verso il punto di fine.

Punto su una linea a distanza

La distanza tra punto iniziale e finale è dato da d = sqrt((x1 - x0)^2 + (y1 - y0)^2)

Sia il rapporto delle distanze, t = dt / d

Poi il punto (xt, yt) = (((1 - t) * x0 + t * x1), ((1 - t) * y0 + t * y1))

Quando 0 < t < 1, il punto è sulla linea.

Quando t < 0, il punto è al di fuori della linea vicino al (x0, y0).

Quando t > 1, il punto è al di fuori della linea vicino al (x1, y1).

Chiamiamo il punto che si sta cercando di trovare P, con le coordinate px, py, e il punto di partenza A di coordinate Ax e Ay. Pendenza m è solo il rapporto tra la variazione in Y rispetto alla variazione nel X, quindi se il punto P è la distanza s da A, quindi le sue coordinate sono px = ax + s, e py = ay + m * s. Ora utilizzando Pitagora, la distanza d da A a P sarà D = sqrt (s * s + (m * s) * (m * s)). Per rendere P essere una specifica unità D di distanza da A, trovare s come s = D / sqrt (1 + m * m).

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