SolarCooker.frink

View or download SolarCooker.frink in plain text format


// Solar cooker design program

f = eval[input["Enter focal length [4 feet]: ", "4 feet"]]

length = eval[input["Enter length of reflective material, long axis [100 in]: ", "100 in"]]
width = eval[input["Enter width of reflective material, short axis [36 in]: ", "36 in"]]

longspars = eval[input["Enter number of long spars [3]: ", 3]]
shortspars = eval[input["Enter number of short spars [7]: ", 7]]

inset = eval[input["Enter inset [2 in]: ", "2 in"]]

longdiff = (width - (2*inset)) / (longspars - 1)
shortdiff = (length - (2*inset)) / (shortspars - 1)


println[]
println["$longspars long spars will be " + (longdiff -> "in") + " apart."]
println["$shortspars short spars will be " + (shortdiff -> "in") + " apart."]

b = 100 in
println["Arc length is " + format[arclen[b,f], "in", 2]]

a = 36 in
println["Arc length is " + format[arclen[a,f], "in", 2]]

// Max height
maxHeight = parabolaHeight[length/2, width/2, f]
println["Maximum height is " + format[maxHeight, "in", 2]]

maxHeight = parabolaHeight[length/2, 0 in, f]
println["Centerline height is " + format[maxHeight, "in", 2]]

println["long\tshort\theight"]
wmin = shortspars mod 2 == 1 ? 0 in : longdiff
lmin = longspars mod 2 == 1 ? 0 in : shortdiff

println["\nCutting short spars:"]
for w = wmin to b/2 step shortdiff
{
   if w == 0 in
      print["x 1"]
   else
      print["x 2"]

   println[" (length " + format[a, "in", 2] + "), " + format[w, "in", 1] + " from center"]
   for l = lmin to a/2 step longdiff
   {
      print[format[l, "in", 1] + "\t"]
      print[format[parabolaHeight[l,w,f], "in", 1]]
      println[]
   }
   println[]
}

println["\nCutting long spars:"]
for l = lmin to a/2 step longdiff
{
   if l == 0 in
      print["x 1"]
   else
      print["x 2"]

   println[" (length " + format[b, "in", 2] + "), " + format[l, "in", 1] + " from center"]
   for w = wmin to b/2 step shortdiff
   {
      print[format[w, "in", 1] + "\t"]
      print[format[parabolaHeight[l,w,f], "in", 1]]
      println[]
   }
   println[]
}

// Find arclength of the curve over a box length b:
// (b sqrt[16 + (b/f)^2])/8 + 2 f arccsch[4 f/b]
arclen[b, f] := (b sqrt[16 + (b/f)^2])/8 + 2 f arccsch[4 f/b]

// Parabola height
// Equation for a parabola with focal length f is z = d^2/(4 f)
// where d is the distance from the center and z is the height.
parabolaHeight[x, y, f] :=
{
   d = sqrt[x^2 + y^2]
   return d^2/(4 f)
}


View or download SolarCooker.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 17592 days, 6 hours, 31 minutes ago.