-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.lua
81 lines (72 loc) · 2.15 KB
/
test.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
local function velocidad_para_objetivo(g, l, hf, h0, angulo)
-- local numerador = -2 * g * (l * l)
-- local denominador = (hf - h0) - math.tan(math.rad(angulo)) * l * math.pow(math.cos(math.rad(angulo)), 2)
local numerador = g * (l * l)
local denominador = 2 * math.pow(math.cos(math.rad(angulo)), 2) * ((hf - h0) - l * math.tan(math.rad(angulo)))
local solucion = math.sqrt(numerador / denominador)
-- cuando no es un numero, tomar la siguiente solucion
if solucion ~= solucion then
solucion = math.sqrt(numerador / -denominador)
end
return solucion
end
-- aplicacion de la formula x=sqrt((mv^2)/k)
local function compresion_para_objetivo(v, k, m)
local numerador = m * v * v
local denominador = k
return math.sqrt(numerador / denominador)
end
-- llegara al punto (x,y)??
function llegara(m, g, k, h0, hf, L, x, y, angulo)
local v = velocidad_para_objetivo(g, L, hf, h0, angulo)
local compresion_requerida = compresion_para_objetivo(v, k, m)
if compresion_requerida > 1 then
print(string.format("el resorte es demasiado debil para llegar a %.2f m/s, asi que no llegara", v))
else
print(
string.format(
"la compresion requerida para llegar al objetivo con %d grados es de %.2f m",
angulo,
compresion_requerida
)
)
end
end
function input(prompt)
io.write(prompt)
return io.read("*n")
end
-- regresa los datos en el orden de los elementos de la variable nombres
function obtener_datos()
local nombres = {
h0 = "altura inicial (h0)",
hf = "altura final (hf)",
m = "masa (m)",
k = "constante del resorte (k)",
g = "gravedad (g)",
x = "obstaculo (x)",
y = "obstaculo (y)",
L = "distancia al objetivo (L)",
}
local resultados = nombres
for k, v in pairs(nombres) do
resultados[k] = input(v)
end
return resultados
end
local datos = obtener_datos()
-- local h0 = 100
-- local hf = 0
-- local masa = 1
-- local constante_k = 20000
-- local gravedad = 9
-- local x_obstaculo = 300
-- local y_obstaculo = 500
-- local distancia = 400
--
-- local compresion = 0.98
-- local angulo = 45
--
for angulo = -20, 90, 1 do
llegara(datos["m"], datos["g"], datos["k"], datos["h0"], datos["hf"], datos["L"], datos["x"], datos["y"], angulo)
end