Ejercicios: 1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo
[ algoritmo ] [ diagrama flujo ]
Para iniciar el ejercicio, se requiere la cantidad n de triángulos a generar y los límites del plano donde se generan [maxa,maxb] .
Para cada triángulo se generan las coordenadas de los vértices (xi,yi), usando números aleatorios ajustados a los límites del plano.
# puntos aleatorios x1 = int(rnd.random()*maxa) +0 y1 = int(rnd.random()*maxb) +0 x2 = int(rnd.random()*maxa) +0 y2 = int(rnd.random()*maxb) +0 x3 = int(rnd.random()*maxa) +0 y3 = int(rnd.random()*maxb) +0
Lo más importante para este ejercicio es determinar las distancias entre los vértices, pues con ellas se determina el tipo de triángulo, siguiento las reglas básicas de la geometría.
# distancias entre puntos
a = np.sqrt((x2-x1)**2 + (y2-y1)**2)
b = np.sqrt((x3-x2)**2 + (y3-y2)**2)
c = np.sqrt((x1-x3)**2 + (y1-y3)**2)
Puede darse el caso que los puntos se encuentren en una sola línea en el plano, el caso se verifica al revisar si la suma de la longitud de dos lados es la longitud del tercer lado. Comprobar en todas las combinaciones ésta situación.
[ algoritmo ] [ diagrama flujo ]
..
Algoritmo en Python
# ICM00794-Fundamentos de Computación - FCNM-ESPOL # 1Eva_IIT2014_T2 Triángulos aleatorios en rectángulo # Propuesta de solución: edelros@espol.edu.ec import numpy as np import random as rnd import matplotlib.pyplot as plt # INGRESO n = int(input(" cuántos triángulos: ")) maxa = int(input(" rango lado a: ")) maxb = int(input(" rango lado b: ")) # PROCEDIMIENTO equilatero = 0 isosceles = 0 escaleno = 0 colineal = 0 i = 1 while (i<=n): # puntos aleatorios x1 = int(rnd.random()*maxa) +0 y1 = int(rnd.random()*maxb) +0 x2 = int(rnd.random()*maxa) +0 y2 = int(rnd.random()*maxb) +0 x3 = int(rnd.random()*maxa) +0 y3 = int(rnd.random()*maxb) +0 # distancias entre puntos a = np.sqrt((x2-x1)**2 + (y2-y1)**2) b = np.sqrt((x3-x2)**2 + (y3-y2)**2) c = np.sqrt((x1-x3)**2 + (y1-y3)**2) # realiza la gráfica de cada triángulo plt.plot([x1, x2], [y1, y2]) plt.plot([x2, x3], [y2, y3]) plt.plot([x1, x3], [y1, y3]) # clasifica triángulos s1 = a + b s2 = b + c s3 = c + a if (s1==c or s2==a or s3==b): colineal = colineal + 1 else: if (a==b and b==c): equilatero = equilatero+1 else: if (a!=b and b!=c and c!=a): escaleno = escaleno+1 else: isosceles = isosceles+1 i=i+1 # SALIDA print("equilateros: ") print(equilatero) print("escalenos: ") print(escaleno) print("isosceles: ") print(isosceles) print("colineales: ") print(colineal) # muestra la gráfica plt.show()
Resultado del algoritmo
cuántos triángulos: 100 rango lado a: 10 rango lado b: 10 equilateros: 0 escalenos: 90 isosceles: 4 colineales: 6 >>> cuántos triángulos: 100 rango lado a: 10 rango lado b: 10 equilateros: 0 escalenos: 87 isosceles: 6 colineales: 7 >>>
[ algoritmo ] [ diagrama flujo ]
..
Diagrama de Flujo
[ algoritmo ] [ diagrama flujo ]