Il modo più semplice intorno a questo non è pensare in termini di pendenza m, ma piuttosto la variazione di x ed y, che Chiamo dx, dy (dalla notazione del calcolo). Il motivo è per una cosa, che trattare con una pendenza per una linea verticale è infinito, e in ogni caso, non è necessario utilizzare le funzioni trigonometriche, questo codice sarà più veloce e più semplice.
dx = x2 - x1;
dy = y2 - y1;
Suppongo qui che il punto 2 sia l'intersezione della linea desiderata.
Ok, quindi la linea perpendicolare ha una pendenza con il reciproco negativo del primo. Ci sono due modi per farlo:
dx2 = -dy
dy2 = dx
o
dx2 = dy
dy2 = -dx
questo corrisponde ai due direzioni, uno girando a destra e l'altro a sinistra.
Tuttavia, dx e dy vengono ridimensionati in base alla lunghezza del segmento di linea originale. La tua perpendicolare ha una lunghezza diversa.
Ecco la lunghezza tra due punti:
double length(double x1, double y1, double x2, double y2) {
return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
}
fare quello che vuoi, andare da una parte o dall'altra, è:
double scale = length(whatever length you want to go)/sqrt(dx*dx+dy*dy);
double dx2 = -dy * scale;
double dy2 = dx * scale
e poi lo stesso ancora una volta per l'altro lato . Ho appena realizzato che il mio esempio è in qualche modo C++, poiché ho usato sqrt, ma le differenze sono banali. Nota che puoi scrivere il codice in modo più efficiente, combinando le radici quadrate.
Dipenderà dal punto sulla linea nota in cui si desidera che la linea perpendicolare lo soddisfi anche. Il tuo diagramma di esempio sembra mostrare che si trova nel punto centrale delle linee note. – ZombieSheep
sì, devono intersecarsi nel punto medio della linea rossa – basszero
Correlati: [calcola un offset perpendicolare da una linea diagonale] (http://stackoverflow.com/q/17195055/183120). – legends2k