secantes rectas perpendiculares paralelas para oblicuas niños lineas imagenes dibujos definicion math geometry 2d computational-geometry

math - rectas - Perpendicular en una línea desde un punto dado



lineas secantes (10)

¿Cómo puedo dibujar una perpendicular en un segmento de línea desde un punto dado? Mi segmento de línea se define como (x1, y1), (x2, y2), si dibujo una perpendicular desde un punto (x3, y3) y se encuentra con la línea en el punto (x4, y4). Quiero saber esto (x4, y4).


Averigüe las pendientes de ambas líneas, por ejemplo, las pendientes son m1 y m2, entonces m1 * m2 = -1 es la condición para la perpendicularidad.


A menudo encontrará que el uso de vectores hace que la solución sea más clara ...

Aquí hay una rutina de mi propia biblioteca:

public class Line2 { Real2 from; Real2 to; Vector2 vector; Vector2 unitVector = null; public Real2 getNearestPointOnLine(Real2 point) { unitVector = to.subtract(from).getUnitVector(); Vector2 lp = new Vector2(point.subtract(this.from)); double lambda = unitVector.dotProduct(lp); Real2 vv = unitVector.multiplyBy(lambda); return from.plus(vv); }

}

Tendrá que implementar Real2 (un punto) y Vector2 y dotProduct () pero estos deberían ser simples:

El código se ve así:

Point2 p1 = new Point2(x1, y1); Point2 p2 = new Point2(x2, y2); Point2 p3 = new Point2(x3, y3); Line2 line = new Line2(p1, p2); Point2 p4 = getNearestPointOnLine(p3);

La biblioteca (org.xmlcml.euclid) está en: http://sourceforge.net/projects/cml/

y hay pruebas unitarias que ejercerán este método y le mostrarán cómo usarlo.

@Test public final void testGetNearestPointOnLine() { Real2 p = l1112.getNearestPointOnLine(new Real2(0., 0.)); Real2Test.assertEquals("point", new Real2(0.4, -0.2), p, 0.0000001); }


Código de función Matlab para el siguiente problema

function Pr=getSpPoint(Line,Point) % getSpPoint(): find Perpendicular on a line segment from a given point x1=Line(1,1); y1=Line(1,2); x2=Line(2,1); y2=Line(2,1); x3=Point(1,1); y3=Point(1,2); px = x2-x1; py = y2-y1; dAB = px*px + py*py; u = ((x3 - x1) * px + (y3 - y1) * py) / dAB; x = x1 + u * px; y = y1 + u * py; Pr=[x,y]; end


Calcule la pendiente de la línea que une los puntos (x1, y1) y (x2, y2) como m=(y2-y1)/(x2-x1)

La ecuación de la línea que une (x1, y1) y (x2, y2) utilizando la forma punto-pendiente de la ecuación de línea, sería y-y2 = m(x-x2)

La pendiente de la unión de línea (x3, y3) y (x4, y4) sería -(1/m)

De nuevo, la ecuación de la línea que une (x3, y3) y (x4, y4) utilizando la forma punto-pendiente de la ecuación de línea, sería y-y3 = -(1/m)(x-x3)

Resuelve estas dos ecuaciones de línea a medida que resuelves una ecuación lineal en dos variables y los valores de xey que obtienes serían tus (x4, y4)

Espero que esto ayude.

aclamaciones


Conoces tanto el punto como la pendiente, por lo que la ecuación para la nueva línea es:

y-y3=m*(x-x3)

Como la línea es perpendicular, la pendiente es el recíproco negativo. Ahora tiene dos ecuaciones y puede resolver su intersección.

y-y3=-(1/m)*(x-x3) y-y1=m*(x-x1)


De la wiki :

En álgebra, para cualquier ecuación lineal y = mx + b, las perpendiculares tendrán una pendiente de (-1 / m), el inverso recíproco de la pendiente original. Es útil memorizar el eslogan "para encontrar la pendiente de la línea perpendicular, voltear la fracción y cambiar el signo". Recuerde que cualquier número entero a es más de uno, y puede escribirse como (a / 1)

Para encontrar la perpendicular de una línea dada que también pasa por un punto particular (x, y), resuelve la ecuación y = (-1 / m) x + b, sustituyendo en los valores conocidos de m, x, y y para resolver para b.

La pendiente de la línea, m, a través (x1, y1) y (x2, y2) es m = (y1 - y2) / (x1 - x2)


Esto es principalmente un duplicado de la respuesta de Arnkrishn. Solo quería completar su sección con un fragmento de código de Mathematica completo:

m = (y2 - y1)/(x2 - x1) eqn1 = y - y3 == -(1/m)*(x - x3) eqn2 = y - y1 == m*(x - x1) Solve[eqn1 && eqn2, {x, y}]


Estoy de acuerdo con peter.murray.rust, los vectores aclaran la solución:

// first convert line to normalized unit vector double dx = x2 - x1; double dy = y2 - y1; double mag = sqrt(dx*dx + dy*dy); dx /= mag; dy /= mag; // translate the point and get the dot product double lambda = (dx * (x3 - x1)) + (dy * (y3 - y1)); x4 = (dx * lambda) + x1; y4 = (dy * lambda) + y1;


Mathematica introdujo la función RegionNearest[] en la versión 10, 2014. Esta función podría usarse para devolver una respuesta a esta pregunta:

{x4,y4} = RegionNearest[Line[{{x1,y1},{x2,y2}}],{x3,y3}]


Resolví las ecuaciones para ti:

k = ((y2-y1) * (x3-x1) - (x2-x1) * (y3-y1)) / ((y2-y1)^2 + (x2-x1)^2) x4 = x3 - k * (y2-y1) y4 = y3 + k * (x2-x1)

Donde ^ 2 significa cuadrado