Questa risposta è simile ad alcuni altri, ma penso che spieghi di più la matematica e dovrebbe consentirvi di incorporarla più facilmente in un programma.
È possibile trovare la pendenza della linea "conosciuto" facendo (Ay-By)/(Ax-Bx)
(dove Ay
è la coordinata y di A
, etc.). Chiamiamo solo questo M
poiché è interamente calcolabile.
Se le due linee sono parallele, allora si può lavorare fuori il gradiente dell'altra linea nello stesso modo:
gradiente = (Cy-Dy)/(Cx-Dx) = M
riordinando a (Cy-Dy) = M*(Cx-Dx)
Sappiamo anche che C->D
è una determinata lunghezza (chiamiamola L). Quindi possiamo dire
(Cy-Dy)^2+(Cx-Dx)^2 = L^2
Utilizzando la nostra equazione gradiente possiamo sostituire per ottenere:
(M^2+1)(Cx-Dx)^2 = L^2
Dato che sappiamo che cosa M, L e DX sono possiamo facilmente risolvere questo:
Cx = ((L^2)/(M^2+1))^0.5 + Dx
quindi possiamo utilizzare questo valore di Cx
insieme a entrambe le equazioni (il gradiente è probabilmente il più semplice) per ottenere Cy
.
Di nota è che l'ultima equazione ha una radice quadrata che può essere positiva o negativa in modo da ottenere due valori possibili di Cx
e quindi due possibili valori di Cy
. Questo è l'equivalente del movimento nelle due direzioni opposte sulla linea parallela da D
.
Edit:
Come notato nei commenti questo fallirà se la linea è verticale (cioè Ax-Bx = 0
). Avresti bisogno di un caso speciale, ma in questo caso la risposta diventa un caso banale di aggiungere o sottrarre la tua lunghezza dal valore di Cy.
esigenze "appartiene a mathoverflow" opzione vicino, se avessero probabilmente fiamma per chiedere una semplice domanda così: p – meagar
@meager: Da quello che ho' Hanno visto, si fermerebbero a corto di fiamma, ma potrebbero essere un po 'condiscendente. :-) –
Sono un grande programmatore, ma le mie abilità matematiche sono sempre state NULL – jmasterx