9 votos

Probabilidad de que uno de un conjunto de cuatro puntos se encuentre dentro del triángulo formado por los otros tres

Dado cuatro puntos, cada uno elegido al azar con una distribución de probabilidad uniforme en el interior de un círculo (WLOG unitario), ¿cuál es la probabilidad de que (cualquiera) de los puntos esté dentro del triángulo formado por los otros tres? Esto es (pretendía ser) equivalente a preguntar cuál es la probabilidad, dadas estos cuatro puntos aleatorios, de que se puedan formar dos "capas" de triángulos, con, por ejemplo, ABC cubierto por (aunque compartiendo un lado con) ABD porque C está en el interior de ABD.

Idealmente, el método de solución sería generalizable a números de puntos mayores que cuatro; en otras palabras, dado (3+n) puntos (para n>1), cada uno elegido al azar con una probabilidad uniforme en el interior de un círculo, ¿cuál es la probabilidad de que se puedan formar n+1 capas. (Estoy teniendo problemas para formular el problema generalizado con precisión; espero que sea claro).

Edición para añadir: En caso de que alguien esté curioso acerca de la procedencia del problema: fue inspirado por Ingress, un juego de realidad aumentada dirigido por Google en el cual los jugadores van a y vinculan puntos geográficos predefinidos para formar "campos", que son simplemente triángulos completos pero que están limitados por la regla de que los enlaces nunca pueden cruzarse. En el juego a menudo es ventajoso formar capas de campos, el caso más simple de los cuales, para cuatro puntos, es el que describo en el primer párrafo y el caso general más eficiente (n-2 campos superpuestos de n puntos) al que aludo en el segundo. He visto y escuchado muchos comentarios de jugadores sobre qué tan a menudo se pueden formar tales campos superpuestos, pero nunca he visto nada que se acerque a una respuesta definitiva.

Nota que esto significa que la pregunta que realmente quería hacer es la misma, pero para puntos en la superficie de una esfera, no en una porción de un plano plano, pero casi todos los campos en el juego son bastante pequeños en comparación con la Tierra (aunque no todos; en raras ocasiones, se forman campos con longitudes de borde de miles de kilómetros; la gran mayoría son de decenas o cientos de metros) así que la respuesta a la pregunta que planteé será una muy buena aproximación.

0 votos

Y también, ¿qué sucede si algunos de los puntos son colineales? Como se discute en la respuesta aquí math.stackexchange.com/questions/455691/…

0 votos

También puede que tengas que definir el método de generación de los puntos aleatorios, de lo contrario podrías encontrarte con algo similar a la paradoja de Bertrand es.wikipedia.org/wiki/Paradoja_de_Bertrand_(probabilidad)

1 votos

Es perfectamente bien definido decir que estás eligiendo los puntos al azar uniformemente dentro del círculo unitario. Bajo esa distribución, parece que la probabilidad de obtener 3 puntos colineales debería ser 0 sin importar cuántos puntos estés colocando, por lo que no importa mucho cómo trates los puntos colineales.

3voto

Reinaldo Vale Puntos 41

Dado que la respuesta del estimado es un poco larga, he publicado esta respuesta matemática por separado.

Dado un triángulo aleatorio en un círculo, la probabilidad de que un punto aleatorio caiga en el triángulo es el área de un triángulo dividido por el área de un círculo.

Entonces lo que necesitamos es el área promedio de un triángulo en un círculo. El área promedio de un triángulo para un disco unitario ($r=1$) se puede determinar con la siguiente fórmula según Wolfram Disk Triangle Picking

$$A_t = \frac{35}{48 \pi} \approx 0.232100... $$

Como todos sabemos, el área de un círculo es

$$A_c = \pi r^2 $$

Porque $r=1$ para un disco unitario se simplifica a

$$A_c = \pi $$

Entonces la probabilidad de que el cuarto punto aleatorio caiga en un triángulo aleatorio es

$$p_4 = \frac{A_t}{A_c} = \frac{35}{48 \pi^2} \approx 0.07388003$$

Sin embargo, con cuatro puntos estamos formando cuatro triángulos, cada punto tendrá la misma probabilidad de caer en el triángulo formado por los otros tres puntos, por lo que la probabilidad es

$$p = 4 \frac{A_t}{A_c} = 4 \frac{35}{48 \pi^2} = \frac{35}{12π^2} \approx 0.295520119$$

La fórmula anterior sólo es válida para

  1. Un disco unitario (r=1). Aún no he encontrado ninguna prueba para el área promedio de un triángulo en un círculo con radio r. ¿Aumenta al mismo ritmo que el área del círculo en $r^2$?*

  2. Cuatro puntos al azar solamente. La pregunta extendida solicitando más puntos aún no está cubierta.

EDICIÓN: La probabilidad sigue siendo la misma para todos los $r > 0$

Ahora he mirado más de 4 puntos y generado conjuntos de puntos aleatorios (100000 veces) y contabilicé cuántos puntos cayeron en triángulos. Algunos resultados interesantes para los que aún no he calculado las matemáticas.

╔═════════════╦═════════╦═════════╦═════════╦═════════╦═════════╗
║      Points ║    4    ║    5    ║    6    ║    7    ║    8    ║
╠═════════════╬═════════╬═════════╬═════════╬═════════╬═════════╣
║ Triangles   ║    4    ║    10   ║    20   ║    35   ║    56   ║
║ Any         ║ 0.29845 ║ 0.64469 ║ 0.86461 ║ 0.96053 ║ 0.99096 ║
║ 0           ║ 0.70155 ║ 0.35531 ║ 0.13539 ║ 0.03947 ║ 0.00904 ║
║ 1           ║ 0.29845 ║ 0       ║ 0       ║ 0       ║ 0       ║
║ 2           ║ 0       ║ 0.54789 ║ 0       ║ 0       ║ 0       ║
║ 3           ║ 0       ║ 0       ║ 0.24551 ║ 0       ║ 0       ║
║ 4           ║ 0       ║ 0.0968  ║ 0.20193 ║ 0.08295 ║ 0       ║
║ 5           ║ 0       ║ 0       ║ 0.04365 ║ 0       ║ 0.02192 ║
║ ...         ║   ...   ║   ...   ║   ...   ║   ...   ║   ...   ║

1 votos

Entonces es $35/(12\pi^2)$. Bien. Ciertamente la probabilidad no depende del radio del círculo; el problema difiere solo por un factor de escala general si $r \neq 1$.

1voto

Reinaldo Vale Puntos 41

Sé que esto no es una demostración matemática, pero se puede dar un aproximado de respuesta a la probabilidad mediante el uso de un gran aleatoria del conjunto de datos.

Así que primero vamos a tener un método de generar aleatoriamente un número en un círculo según este Disco Punto de Recoger la leche de fórmula.

La definición de $r \in [0,1]$ $\theta \in [0,2\pi]$ podemos utilizar

$$x = \sqrt{r} \cos \theta$$

$$y = \sqrt{r} \sin \theta$$

Using that to generate 4 sets of random points we then have to calculate if one of them is in the triangle of the other three points. For this I used the answer to the question determine whether point lies inside triangle which advised using barycentric coordinates

Defining $p$ as the point to check and $p_1$, $p_2$, $p_3$ to points to check against it gave the following formula.

$$\alpha = \frac{(p_2.y - p_3.y)\cdot (p.x - p_3.x) + (p_3.x - p_2.x)\cdot (p.y - p_3.y)}{(p_2.y - p_3.y)\cdot (p_1.x - p_3.x) + (p_3.x - p_2.x)\cdot (p_1.y - p_3.y)}$$

$$\beta = \frac{((p_3.y - p_1.y)\cdot (p.x - p_3.x) + (p_1.x - p_3.x)\cdot (p.y - p_3.y))}{((p_2.y - p_3.y)\cdot (p_1.x - p_3.x) + (p_3.x - p_2.x)\cdot (p_1.y - p_3.y))}$$

$$\gamma = 1.0 - \alpha - \beta$$

If $\alpha$, $\beta$ and $\gamma$ son todos mayores que cero que el punto está dentro del triángulo.

A continuación, tienes que hacer lo mismo para los otros 3 puntos.

Entonces me corrí 200 veces y registra cada momento si uno de los puntos fue en el triángulo de las otras tres y obtuvo un promedio total de 32% (Nota: Véase la Edición 2 donde se ejecuta a lo largo de más de iteración usando Google Vaya código y obtener alrededor de 29.5%, también el Ir de Código utiliza un rechazo al método de muestreo para generar x e y en lugar de Disco Punto de Picking)

EDITAR:

Como mi resultado ha sido cuestionada voy a añadir más detalles a lo que yo creo que la pregunta original está pidiendo, y cómo he conseguido mis resultados.

De hecho, me puso en una hoja de cálculo de Excel de modo que no sólo podía calcular cosas, yo podía ver gráficamente si los resultados eran correctos en el mismo tiempo.

A continuación es lo que la hoja de cálculo se parece a Excel spreadsheet showing in triangle Y este es el diagrama que muestra los mismos cuatro puntos con 4 en el interior del triángulo de los puntos 1 a 3 Graph showing in triangle

Aquí es lo que las fórmulas en la hoja de cálculo.

La Radio Y Aleatorio de columna tanto sólo contienen =RAND()

El Omega Columna de la primera celda que contiene =C3*2*PI() es decir $Random*2*\pi$ e esta copiado abajo para las otras tres células.

Para la columna x de la primera celda que contiene =SQRT(B3)*COS(D3) y otra vez copiado abajo

Para la y columna de la primera celda que contiene =SQRT(B3)*SIN(D3) y otra vez copiado abajo

Yo, a continuación, se define el x e y columnas con los nombres de p1.x, p1.y, p2.x, p2.y etc. esto es así ya que fácilmente podría utilizar el baricéntrico coordenadas fórmula y actualizarlos para cada punto.

Para el alfa

(G3) =((p3.y - p4.y)*(p1.x - p4.x) + (p4.x - P3.x)*(p1.y - p4.y)) / ((p3.y - p4.y)*(P2.x - p4.x) + (p4.x - P3.x)*(p2.y - p4.y))

(G4) =((p3.y - p4.y)*(P2.x - p4.x) + (p4.x - P3.x)*(p2.y - p4.y)) / ((p3.y - p4.y)*(p1.x - p4.x) + (p4.x - P3.x)*(p1.y - p4.y))

(G5) =((p1.y - p4.y)*(P3.x - p4.x) + (p4.x - p1.x)*(p3.y - p4.y)) / ((p1.y - p4.y)*(P2.x - p4.x) + (p4.x - p1.x)*(p2.y - p4.y))

(G6) =((p3.y - p1.y)*(p4.x - p1.x) + (p1.x - P3.x)*(p4.y - p1.y)) / ((p3.y - p1.y)*(P2.x - p1.x) + (p1.x - P3.x)*(p2.y - p1.y))

Para la beta

(H3) =((p4.y - p2.y)*(p1.x - p4.x) + (P2.x - p4.x)*(p1.y - p4.y)) / ((p3.y - p4.y)*(P2.x - p4.x) + (p4.x - P3.x)*(p2.y - p4.y))

(H4) =((p4.y - p1.y)*(P2.x - p4.x) + (p1.x - p4.x)*(p2.y - p4.y)) / ((p3.y - p4.y)*(p1.x - p4.x) + (p4.x - P3.x)*(p1.y - p4.y))

(H5) =((p4.y - p2.y)*(P3.x - p4.x) + (P2.x - p4.x)*(p3.y - p4.y)) / ((p1.y - p4.y)*(P2.x - p4.x) + (p4.x - p1.x)*(p2.y - p4.y))

(H6) =((p1.y - p2.y)*(p4.x - p1.x) + (P2.x - p1.x)*(p4.y - p1.y)) / ((p3.y - p1.y)*(P2.x - p1.x) + (p1.x - P3.x)*(p2.y - p1.y))

Para la gamma de la primera celda que contiene =1-G3-H3 y copiado abajo

En el triángulo de la primera celda que contiene =IF(G3<=0,0,IF(H3<=0,0,IF(I3<=0,0,1))) y copiado abajo

Para (J7) =SUM(J3:J6)

Y si usted se está preguntando acerca de la Trama de la sección, que era sólo para que yo pudiera obtener la gráfica para dibujar cada línea de forma independiente lo que es posible hacer que el punto es que visualmente. También tengo otra sección de datos estáticos, que no se muestra, para dibujar la línea circular.

Aquí hay otro ejemplo de uno de los puntos están dentro de los otros tres, en este caso el punto #2

Point 2 numbersPoint 2 graphics

Y aquí está un ejemplo de los puntos no caer con los triángulos.

Not in numbersNot in graphic

Debido a que el RAND() causas que los valores cambian cada vez, he creado una tabla con filas 1-10 y columnas de la 1 a la 10 y anote el resultado 0 o 1 en cada celda. Después de que usted puede conseguir en un promedio de ellas para determinar el porcentaje de aquellos en los que uno de los puntos está en el triángulo de las otras tres puntos. Muy manual sé, pero le permite visiblemente comprobar los resultados cada vez.

Por favor, siéntase libre de reproducir, o si te gusta puedo publicar la hoja de cálculo para que puedas descargarla.

EDIT2

Y aquí está el Google VAYA código modificado para generar 4 puntos y la prueba de los cuatro puntos. Nota; Ejecución de este más de 1000 iteraciones se acerca al 29,5%, que es probablemente la más precisa.

EDIT3
Sembraron la generación de números aleatorios, sin que se obtiene exactamente el mismo resultado cada vez.

Nota: El Total probability of hitting a triangle probablemente no es precisa, ya que no tiene en cuenta la superposición de cualquiera de los triángulos (por ejemplo, cuando un punto está dentro del triángulo de las otras tres).

package main

import (
    "fmt"
    "math/rand"
    "math"
    "time"
)

var rejected int = 0
var calls int = 0

type point struct {
    x float64
    y float64
}

func rpoint() point {
    var p point
tryagain:
    calls++
    p.x = 2.0*rand.Float64()-1.0;
    p.y = 2.0*rand.Float64()-1.0;
    len := p.x*p.x + p.y*p.y
    if len > 1.0 {
        rejected++
        goto tryagain;
    }
    return p
}

func lensq(p1 point, p2 point) float64 {
    x := p1.x - p2.x
    y := p1.y - p2.y
    l := math.Sqrt(x*x + y*y)
    return l
}

func area(p1 point, p2 point, p3 point) float64 {
    a := lensq(p1, p2)
    b := lensq(p3, p2)
    c := lensq(p3, p1)
    s := (a + b + c)/2.0
    hero := math.Sqrt(s*(s-a)*(s-b)*(s-c))
    return hero
}

func intriangle(p point, p1 point, p2 point, p3 point) int {
 alpha := ((p2.y - p3.y)*(p.x - p3.x) + (p3.x - p2.x)*(p.y - p3.y)) / ((p2.y - p3.y)*(p1.x - p3.x) + (p3.x - p2.x)*(p1.y - p3.y))
 beta := ((p3.y - p1.y)*(p.x - p3.x) + (p1.x - p3.x)*(p.y - p3.y)) /  ((p2.y - p3.y)*(p1.x - p3.x) + (p3.x - p2.x)*(p1.y - p3.y))
 gamma := 1.0 - alpha - beta

 isin := 1

 if (alpha <= 0) {
    isin = 0
 }

 if (beta <= 0) {
    isin = 0
 }

 if (gamma <= 0) {
    isin = 0
 }

 return isin

}

func main() {
    max := 100000 
    total := 0.0 
    total2 := 0.0 // Needed for the other triangles with 4 points
    total3 := 0.0
    total4 := 0.0

    point1intotal := 0
    point2intotal := 0
    point3intotal := 0
    point4intotal := 0

    rand.Seed(time.Now().UTC().UnixNano())

    for test := 0; test < max; test++ {
        p1 := rpoint()
        p2 := rpoint()
        p3 := rpoint()
        p4 := rpoint()
        a := area(p1, p2, p3)
        total += a
        a2 := area(p2, p3, p4)
        total2 += a2
        a3 := area(p2, p4, p1)
        total3 += a3
        a4 := area(p4, p1, p3)
        total4 += a4

        point1intotal += intriangle(p1, p2, p3, p4)
        point2intotal += intriangle(p2, p1, p3, p4)
        point3intotal += intriangle(p3, p1, p2, p4)
        point4intotal += intriangle(p4, p1, p2, p3)
    }
    fmt.Println("average area triangle 1 = ",total/(float64(max)))
    fmt.Println("average area triangle 2 = ",total2/(float64(max)))
    fmt.Println("average area triangle 3 = ",total3/(float64(max)))
    fmt.Println("average area triangle 4 = ",total4/(float64(max)))

    // Lets calcuate the probabilities outside of the Print so we can add them
    probability1 := total/(float64(max)*math.Pi)
    probability2 := total2/(float64(max)*math.Pi)
    probability3 := total3/(float64(max)*math.Pi)
    probability4 := total4/(float64(max)*math.Pi)

    // Add the probabilities & points in triangle
    totalprobability := probability1 + probability2 + probability3 + probability4
    totalintriangle := point1intotal + point2intotal + point3intotal + point4intotal 

    fmt.Println("probability of hitting triangle 1= ",probability1)
    fmt.Println("probability of hitting triangle 2 = ",probability2)
    fmt.Println("probability of hitting triangle 3 = ",probability3)
    fmt.Println("probability of hitting triangle 4 = ",probability4)
    fmt.Println("Total probability of hitting a triangle = ",totalprobability)

    // As a check, see if we get a value close to PI here.
    fmt.Println("rejected = ", rejected, 4.0*float64(calls-rejected)/float64(calls))

    fmt.Println("Point 1 in triangle= ",point1intotal)
    fmt.Println("Point 2 in triangle= ",point2intotal)
    fmt.Println("Point 3 in triangle= ",point3intotal)
    fmt.Println("Point 4 in triangle= ",point4intotal)
    fmt.Println("Total Points in triangle= ",totalintriangle)
    fmt.Println("Total percentage in triangle= ",float64(totalintriangle)/(float64(max)))

}

Resultados

average area triangle 1 =  0.23174344583609957
average area triangle 2 =  0.23199478541566787
average area triangle 3 =  0.2325415159584758
average area triangle 4 =  0.23231070178729094
probability of hitting triangle 1=  0.07376622986792832
probability of hitting triangle 2 =  0.07384623374089419
probability of hitting triangle 3 =  0.07402026347774858
probability of hitting triangle 4 =  0.07394679304518911
Total probability of hitting a triangle =  0.29557952013176025
rejected =  108797 3.144672629752141
Point 1 in triangle=  7505
Point 2 in triangle=  7361
Point 3 in triangle=  7300
Point 4 in triangle=  7299
Total Points in triangle=  29465
Total percentage in triangle=  0.29465

EDICIÓN 4

Dado un triángulo en un círculo, la posibilidad de un punto aleatorio de aterrizaje en el triángulo el área de un triángulo dividido por el área de un círculo.

Área del triángulo = $\lvert P1.x*(p2.y-p3.y)+P2.x*(p3.y-P1.y)+P3.x*(P1.y-p2.y) \rvert \over 2$

El área de un círculo = $\pi r^2$

Así que la probabilidad = $\lvert P1.x*(p2.y-p3.y)+P2.x*(p3.y-P1.y)+P3.x*(P1.y-p2.y) \rvert \over 2 \pi r^2$

Supongamos que tenemos un triángulo con

$P_1(x,y)=(-0.5,0)$

$P_2(x,y)=(0.5,0)$

$P_3(x,y)=(0,0.1)$

Luego hay cuatro áreas de la cuarta puntos de la tierra, de modo que uno de los puntos es que en un triángulo. Las áreas adicionales son aquellos en los que si se extienden las líneas del triángulo original, de modo que se cruzan el círculo. Las zonas que se encuentran entre el punto y el círculo también causará un triángulo que forma con uno de los puntos en ella. La zona azul para el punto 1, el amarillo para el punto 2 y el rosa para los puntos 3.

Known triangle

Este es el que más claramente muestra con el punto 3 en el triángulo formado por los puntos 1,2 y 4 Point 3 in triangle

Así que tenemos que añadir las tres áreas para el área triangular de trabajar de la probabilidad.

Sin embargo, eso es bastante complicado como usted tendría que trabajar fuera de las intersecciones para el círculo de trabajo y el tamaño promedio de un pastel en forma de esferas. Hay un enfoque más sencillo para, ver a mi otra respuesta que da a las matemáticas.

0 votos

Haciéndolo numéricamente, obtengo una probabilidad de aproximadamente 0.074 de que el cuarto punto esté dentro del triángulo. El 32% es muy contraintuitivo y supondría mal. Estamos dividiendo el círculo en siete piezas usando las tres líneas a través de tres puntos. Al menos la mitad del tiempo estamos en la mitad más pequeña de una línea que divide el círculo en dos, y luego estamos dividiendo eso en dos nuevamente, dos veces. A una suposición alocada, el triángulo central no ocupará el 34% del espacio en promedio. Deberías publicar los códigos que usaste para calcular este valor.

0 votos

Además, el valor máximo posible para la probabilidad es el área de un triángulo equilátero inscrito en el círculo dividido por el área del círculo $= {\sqrt3\times3/2\times1/2\over\pi r^2}\approxeq0.41$ por lo que la cifra del 34% me parece extremadamente poco probable.

0 votos

La probabilidad es que CUALQUIERA de los cuatro puntos se encuentre dentro del triángulo de los otros tres, por lo que sería 0.074 * 4 = 0.296, así que no está muy lejos.

1voto

Suzu Hirose Puntos 3759

Estoy publicando este código para calcular numéricamente la respuesta como una wiki comunitaria en respuesta al post de @Dijkgraaf. Da los siguientes valores

área promedio =  0.23156136586256632
probabilidad de acertar =  0.0737082720122766
rechazado =  81491 3.1455525818433463

Aquí está el código (en lenguaje Google Go):

paquete principal

import (
    "fmt"
    "math/rand"
    "math"
)

var rechazado int = 0
var llamadas int = 0

tipo punto struct {
    x float64
    y float64
}

func rpoint() point {
    var p point
tryagain:
    llamadas++
    p.x = 2.0*rand.Float64()-1.0;
    p.y = 2.0*rand.Float64()-1.0;
    len := p.x*p.x + p.y*p.y
    if len > 1.0 {
        rechazado++
        goto tryagain;
    }
    return p
}

func lensq(p1 point, p2 point) float64 {
    x := p1.x - p2.x
    y := p1.y - p2.y
    l := math.Sqrt(x*x + y*y)
    return l
}

func area(p1 point, p2 point, p3 point) float64 {
    a := lensq(p1, p2)
    b := lensq(p3, p2)
    c := lensq(p3, p1)
    s := (a + b + c)/2.0
    hero := math.Sqrt(s*(s-a)*(s-b)*(s-c))
    return hero
}

func main() {
    max := 100000
    total := 0.0
    for test := 0; test < max; test++ {
        p1 := rpoint()
        p2 := rpoint()
        p3 := rpoint()
        a := area(p1, p2, p3)
        total += a
    }
    fmt.Println("área promedio = ",total/(float64(max)))
    fmt.Println("probabilidad de acertar = ",total/(float64(max)*math.Pi))
    // Como comprobación, veamos si obtenemos un valor cercano a PI aqui.
    fmt.Println("rechazado = ", rechazado, 4.0*float64(llamadas-rechazado)/float64(llamadas))
}

1 votos

Es posible que desees volver a leer la pregunta. "¿Cuál es la probabilidad de que (cualquiera) de los puntos esté dentro del triángulo formado por los otros tres?" Lo que estás mostrando ahí es la posibilidad de que el cuarto punto caiga en los tres primeros.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X