2010-10-23 21 views

Respuesta

10

He leído la respuesta de brainjam y compruebo si su respuesta es cierta y él tiene razón. Cálculo: O (0; 0), A (a; 0) y B (x; y) son los tres puntos del triángulo. C1 es el círculo alrededor de A y r1 = c; C2 es el círculo alrededor de O y r2 = b. B (X; Y) es la intersección de C1 y C2, lo que significa que el punto está en ambos círculos.

alt text

C1: (x - a) * (x - a) + y * y = c * c

C2: x * x + y * y = b * b

y * y = b * b - x * x

(x - a) * (x - a) + b * b - x * x = c * c

x * x - 2 * a * x + a * a + b * b - x * x - c * c = 0

2 * a * x = (a * a + b * b - c * c)

x = (a * a + b * b - c * c)/(2 * a)

y * y = b * b - ((a * a + b * b - c * c)/(2 * a)) * ((a * a + b * b - c * c)/(2 * a))

y = + - sqrt (b * b - ((a * a + b * b - c * c)/(2 * a)) * ((a * a + b * b - c * c)/(2 * a)))

+2

+1 para publicar datos matemáticos. –

8

Coloque el primer vértice en el origen (0,0). Coloque el segundo vértice en (a, 0). Para calcular el tercer vértice, encuentre el intersection de los dos círculos con centros (0,0) y (a, 0) y radios byc.

Actualización: Lajos Arpad ha proporcionado los detalles para calcular la ubicación del tercer punto en this answer. Se reduce a (x, y) donde x = (b + un -c)/2a y y = y plusmn; sqrt (b -x)

+2

Muy buena solución, te recomiendo, pero me parece incompleta esta respuesta, porque no escribiste los detalles. Tomé una hoja de papel y un bolígrafo y calculé lo que dijo; me gustaría compartir el resultado con cualquier persona interesada en el tema. –

+0

@Lajos, no estoy seguro de qué se debe probar. La construcción resulta en lados de longitud a, b, c ... Yo diría que esto es obvio, ¿por qué dirías que esto no es obvio? – brainjam

+0

Porque se hizo una pregunta sobre esto. No sabía acerca de esta solución y tuve que verificar. Soy un agnóstico, creyendo solo lo que veo. Tuviste toda la razón con tu publicación, solo quería especificarla más. Además, la solución es una solución, porque puedes poner el triángulo donde quieras con las técnicas de rotación y traducción. –

3

Al dibujar un triángulo desconocido, generalmente es más fácil elegir un lado (por ejemplo, el más largo) y colocarlo horizontal o verticalmente. Los puntos finales de ese lado forman dos de los vértices del triángulo, y puede calcular el tercero subdividiendo el triángulo en dos triángulos rectos (los otros dos lados son las hipotenusas) y usando las funciones seno/coseno inversas para descubrir los ángulos que faltan . Al subdividir en triángulos rectos, me refiero a algo que se parece a la imagen aquí: http://en.wikipedia.org/wiki/File:Triangle.TrigArea.svg Su primer lado sería AC en ese dibujo.

Una vez que tenga el triángulo resuelto, debería ser fácil calcular su centro y traducirlo para centrarlo en el punto central arbitrario que desee.

2

Primero compruebe que el triángulo es posible:

 
    a+b >= c 
    b+c >= a 
    c+a >= b
Luego, si es así, resuelva la intersección de los dos círculos. Los vértices básicos son
 
    {0,0}, {a,0}, {x,y}
donde
 
    x = (a^2-b^2+c^2)/(2a) 
    y = sqrt(c^2-x^2)
Encontrar el circuncentro es bastante fácil a partir de este punto.

+0

¿De dónde sacaste la fórmula para 'x' y' y'? –

+0

La fórmula no es correcta (pruébela para a, b, c = 4,3,5 por ejemplo). La fórmula correcta se deriva en la respuesta de Lajos. – brainjam

+0

@brainjam: x = (4^2 - 3^2 + 5^2)/(8) == 32/8 == 4 == a, como se esperaba. y = sqrt (5^2-16) = 3 == b, como se esperaba. Es una versión vestida de la ley de los cosenos y luego del teorema de Pitágoras.También pasa a ser la * única * solución a la intersección de los dos círculos que * también * satisface la desigualdad del triángulo para las longitudes de los lados (las tres pruebas de posibilidad que di). –

5

enter image description here

Esta pregunta y las respuestas helpe Hoy estoy en la implementación de esto. Calculará los vértices desconocidos, "c" de las intersecciones de círculo dadas 2 puntos conocidos (a, b) y las distancias (ac_length, bc_length) al 3er vértice desconocido, "c". Aquí está mi implementación de python resultante para cualquier persona interesada.

También hace referencia a la siguiente:

http://mathworld.wolfram.com/RadicalLine.html

http://mathworld.wolfram.com/Circle-CircleIntersection.html

Usando módulo GEOS de django para el objeto Point(), lo que podría ser reemplazado con, objetos torneadas o punto eliminadas por completo realmente.

from math import sqrt 
from django.contrib.gis.geos import Point 

class CirclesSeparate(BaseException): 
    pass 

class CircleContained(BaseException): 
    pass 

def discover_location(point_a, point_b, ac_length, bc_length): 
    """ 
    Find point_c given: 
     point_a 
     point_b 
     ac_length 
     bc_length 

    point_d == point at which the right-angle to c is formed. 
    """ 
    ab_length = point_a.distance(point_b)  
    if ab_length > (ac_length + bc_length): 
     raise CirclesSeparate("Given points do not intersect!")  
    elif ab_length < abs(ac_length - bc_length): 
     raise CircleContained("The circle of the points do not intersect")  

    # get the length to the vertex of the right triangle formed, 
    # by the intersection formed by circles a and b 
    ad_length = (ab_length**2 + ac_length**2 - bc_length**2)/(2.0 * ab_length)  

    # get the height of the line at a right angle from a_length 
    h = sqrt(abs(ac_length**2 - ad_length**2)) 

    # Calculate the mid point (point_d), needed to calculate point_c(1|2) 
    d_x = point_a.x + ad_length * (point_b.x - point_a.x)/ab_length 
    d_y = point_a.y + ad_length * (point_b.y - point_a.y)/ab_length 
    point_d = Point(d_x, d_y)  

    # get point_c location 
    # --> get x 
    c_x1 = point_d.x + h * (point_b.y - point_a.y)/ab_length 
    c_x2 = point_d.x - h * (point_b.y - point_a.y)/ab_length 

    # --> get y 
    c_y1 = point_d.y - h * (point_b.x - point_a.x)/ab_length 
    c_y2 = point_d.y + h * (point_b.x - point_a.x)/ab_length  

    point_c1 = Point(c_x1, c_y1) 
    point_c2 = Point(c_x2, c_y2)  
    return point_c1, point_c2 
Cuestiones relacionadas