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
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
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
Y aquí está un ejemplo de los puntos no caer con los triángulos.
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.
Este es el que más claramente muestra con el punto 3 en el triángulo formado por los puntos 1,2 y 4
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
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.
0 votos
Básicamente estás calculando el área de un triángulo con tres puntos uniformemente distribuidos dentro de un triángulo, y dividiendo ese área por $\pi r^2$.
0 votos
No creo que eso sea completamente cierto; pienso que es parte del problema, pero no todo. La pregunta no es "¿Cuál es la probabilidad de que un punto elegido al azar se encuentre dentro de un triángulo formado por otros tres puntos elegidos al azar" (con las estipulaciones apropiadas sobre rango y distribución), lo que, tienes razón, sería equivalente al problema del área. Debido a que comienzo con los cuatro puntos, creo que necesitamos verificar todas las posibilidades, y el hecho de que (digamos) A no esté dentro de BCD afecta la probabilidad de que (digamos) B esté dentro de ACD.
0 votos
Para el caso de tener más puntos, quizás te interese esta pregunta.
0 votos
mathworld.wolfram.com/SylvestersFour-PointProblem.html mathworld.wolfram.com/SylvestersFour-PointProblem.html