Español   Ejemplos 3D: un hórreo asturiano

¿Sabes lo que es un hórreo?

Combinando varios cuerpos geométricos adecuadamente, conseguimos un hórreo asturiano.

Dibujaremos un hórreo usando como subprocedimientos una pirámide truncada que, a su vez, llama a un procedimeinto trapecio.

Construiremos varios primas como pirámides truncadas de lados iguales y ángulos diedros de 90 grados para no necesitar muchos procedimientos (una pequeña trampa que puede evitarse fácilmente, pero que alagaría mucho el programa).


para horreo :lado
#
  borrapantalla perspectiva pongrosor 4
# Vamos a controlar siempre desde donde empezamos
   hazlocal "xini coordenadax
   hazlocal "yini coordenaday
   hazlocal "zini coordenadaz
#  Suelo, un cuadrado verde
  poncolorlapiz verdeoscuro
  subelapiz ponxyz (:xini-:lado) (:yini-:lado) :zini
  bajalapiz
  trapecio :lado*2 :lado*2 :lado*2
# Vamos colos cuatro pegoyos
  subelapiz
    ponxyz (:xini-5*:lado/12) (:yini-5*:lado/12) :zini
  bajalapiz
  poncolorlapiz gris
  repite 4
   [ troncopiramide :lado/6 :lado/6 :lado/12 :lado/12 :lado/4
     subelapiz
       avanza 5*:lado/6 giraderecha 90
     bajalapiz ]
# Vamos con les cuatro mueles
  subelapiz
    ponxyz (:xini-5*:lado/12) (:yini-5*:lado/12) :yini+:lado/4
  bajalapiz
  repite 4         # Son prismas
    [ troncopiramide :lado/6 :lado/6 :lado/6 :lado/6 :lado/36
      subelapiz
        avanza 5*:lado/6 giraderecha 90
      bajalapiz ]
# Ahora ye'l turno los trabes
  poncolorlapiz [105 85 50] # Un marron oscuro
  subelapiz
    ponxyz (:xini-3*:lado/8) (:yini-:lado/2) :zini+:lado*5/18
  bajalapiz
  repite 4         # Tambien son prismas
    [ troncopiramide :lado :lado/12 :lado :lado/12 :lado/12
      subelapiz
        avanza 21*:lado/24 giraderecha 90 retrocede 3*:lado/24
      bajalapiz ]
# La construccion sigue coles colondres => Prisma de base cuadrada
  poncolorlapiz marron
  subelapiz
    ponxyz (:xini-5*:lado/12) (:yini-5*:lado/12) :zini+:lado*13/36
  bajalapiz
  troncopiramide 5*:lado/6 5*:lado/6 5*:lado/6 5*:lado/6 :lado/3
# Unos adornos
  adornoshorreo :lado
# Ahora toca el teyau => Piramide
  poncolorlapiz rojo
  subelapiz
    ponxyz (:xini-:lado/2) (:yini-:lado/2) coordenadaz + :lado/3
  bajalapiz
  troncopiramide :lado :lado 1 1 :lado/5
# Y la subidona, varios prismas pegados unos a otros
  subelapiz
    ponxyz (:xini-:lado/2.5) (:yini+:lado/2) :zini
  bajalapiz
  poncolorlapiz [110 110 110]
  repite 8
   [ troncopiramide :lado/12 :lado/5 :lado/12 :lado/5 :lado*contador/24
     subelapiz
       giraderecha 90 avanza :lado/24 giraizquierda 90
     bajalapiz ]
  subelapiz ponxyz :xini :yini :zini bajalapiz
  vista3D
fin

para troncopiramide :largog :anchog :largop :anchop :altura
# Para dibujar la tapa, necesitamos saber donde empezamos
  hazlocal "xini coordenadax
  hazlocal "yini coordenaday
  hazlocal "zini coordenadaz
#
  hazlocal "lado2 (:largoG-:largop)/2
    si (:lado2 = 0) 
     [ hazlocal "phi 90 ]
     [ hazlocal "phi arctg (:altura/:lado2) ]
  haz "lado2 :altura/seno :phi
#
  hazlocal "lado1 (:anchoG-:anchop)/2
    si (:lado1 = 0) 
     [ hazlocal "gamma 90 ]
     [ hazlocal "gamma arctg (:altura/:lado1) ]
  haz "lado1 :altura/seno :gamma
#
  trapecio :largoG :largoG :anchoG
  repite 2
    [ balanceaizquierda :gamma
         trapecio :largoG :largop :lado1
      balanceaderecha :gamma avanza :largoG giraderecha 90
      balanceaizquierda :phi 
         trapecio :anchoG :anchop :lado2
      balanceaderecha :phi avanza :anchoG giraderecha 90 ]
   subelapiz
     ponxyz :xini :yini :zini+:altura
     avanza (:anchoG-:anchop)/2 giraderecha 90
     avanza (:largoG-:largop)/2 giraizquierda 90
   bajalapiz
   trapecio :largop :largop :anchop
   subelapiz ponxyz :xini :yini :zini bajalapiz
fin

para trapecio :base :tapa :altura
  empiezapoligono
    hazlocal "semi (:base-:tapa)/2
    si (:semi = 0) 
     [ hazlocal "alpha 90 ]
     [ hazlocal "alpha arctg (:altura/:semi) ]
    hazlocal "lado raizcuadrada (:altura*:altura + :semi*:semi)
    avanza :base giraderecha 180 - :alpha
    avanza :lado giraderecha :alpha
    avanza :tapa giraderecha :alpha
    avanza :lado giraderecha 180-:alpha
  finpoligono
fin

para adornoshorreo :lado
# Van la puerta y unos adornos poles colondres
  poncolorlapiz negro # [50 0 0]
  subenariz 90
    repite 4
      [ repite 20
           [ empiezalinea avanza :lado/3 finlinea
             retrocede :lado/3
             giraderecha 90 avanza :lado/24 giraizquierda 90 ]
        balanceaderecha 90 ]
    poncolorlapiz [50 0 0]
    subelapiz
       bajanariz 90 avanza (5.05*:lado/6) giraderecha 90
       avanza (:lado/3) giraizquierda 90 subenariz 90
     bajalapiz
     trapecio 0.25*:lado 0.25*:lado :lado/6
  bajanariz 90
fin
Probar este programa ahora

Comando a ejecutar:
horreo 600