fogón

← MedievalObjeto 3Dfogon/carreta

Carreta

de fogonCC010616 bloques
CarretaArrastrá para girarlo
// «Carreta» · gpt-6-sol (medium)
// A medieval two-wheeled wooden farm cart: a rectangular open box bed of brown planks with side rails, two big spoked wooden wheels with black iron rims on the sides, two long shafts sticking out forward to hitch a horse, loaded with a couple of hay bales and a burlap sack.

// Medieval farm cart — front faces -y.
const wood = "#754829", woodLight = "#9a6338", woodDark = "#4b3022";
const iron = "#25272a", ironLight = "#4b4d4b";
const straw = ["#c9a250", "#dfbc68", "#b98d3e", "#ead184"];

// Axle and heavy undercarriage.
box(7, 28, 11, 41, 30, 13, woodDark);
box(10, 18, 14, 37, 41, 16, woodDark);
box(11, 17, 17, 36, 41, 18, wood);
for (let y = 19; y <= 39; y += 5) {
  box(11, y, 18, 36, y, 18, woodLight);
}
box(11, 17, 15, 36, 19, 17, woodDark);
box(11, 39, 15, 36, 41, 17, woodDark);

// Two long, slightly rising horse shafts.
for (const x of [15, 32]) {
  line(x, 3, 13, x, 21, 16, 1.2, wood);
  line(x, 5, 14, x, 18, 16, 0, woodLight);
  box(x - 1, 3, 12, x + 1, 5, 14, iron);
  set(x, 3, 14, ironLight);
}
box(15, 13, 14, 32, 14, 15, woodDark);
for (const x of [17, 30]) box(x, 13, 16, x + 1, 14, 16, iron);

// Solid plank bed, with distinct horizontal boards.
for (const x of [11, 34]) {
  for (let z = 19; z <= 25; z += 2) {
    box(x, 18, z, x + 2, 41, z + 1, z === 23 ? woodLight : wood);
    for (let y = 21; y <= 40; y += 7) {
      set(x, y, z + 1, woodDark);
      set(x + 2, y + 2, z, woodLight);
    }
  }
  box(x - 1, 17, 26, x + 3, 42, 27, woodDark);
  box(x, 18, 27, x + 2, 41, 27, woodLight);
  for (const y of [18, 26, 34, 40]) {
    box(x - 1, y, 19, x + 3, y + 1, 27, woodDark);
    box(x, y, 20, x + 2, y, 25, woodLight);
    set(x - 1, y, 24, ironLight);
    set(x + 3, y, 24, ironLight);
  }
}
for (const y of [17, 40]) {
  for (let z = 19; z <= 24; z += 2) {
    box(14, y, z, 33, y + 1, z + 1, z === 21 ? woodLight : wood);
  }
  box(12, y, 25, 35, y + 2, 26, woodDark);
  box(13, y, 26, 34, y + 1, 26, woodLight);
}
for (const x of [13, 34]) {
  box(x, 17, 19, x + 1, 19, 27, iron);
  box(x, 40, 19, x + 1, 42, 27, iron);
  set(x, 17, 23, ironLight);
  set(x, 42, 23, ironLight);
}

// Hay bales: chunky golden blocks with loose, irregular straw.
function bale(x0, y0, z0, x1, y1, z1) {
  box(x0 + 1, y0, z0, x1 - 1, y1, z1, straw[0]);
  box(x0, y0 + 1, z0, x1, y1 - 1, z1 - 1, straw[1]);
  box(x0 + 1, y0 + 1, z1, x1 - 1, y1 - 1, z1, straw[3]);

  for (let i = 0; i < 95; i++) {
    const x = x0 + Math.floor(rand() * (x1 - x0 + 1));
    const y = y0 + Math.floor(rand() * (y1 - y0 + 1));
    const z = z0 + Math.floor(rand() * (z1 - z0 + 1));
    if (get(x, y, z)) set(x, y, z, straw[Math.floor(rand() * straw.length)]);
  }
  // Two dark twine bindings around each bale.
  for (const x of [x0 + 3, x1 - 2]) {
    box(x, y0, z0, x, y0, z1, "#806236");
    box(x, y1, z0, x, y1, z1, "#806236");
    box(x, y0, z1, x, y1, z1, "#806236");
  }
}
bale(14, 22, 24, 23, 32, 30);
bale(25, 21, 24, 33, 30, 31);

// Slumped burlap sack behind the hay.
ellipsoid(29, 36, 27, 5, 4, 5, "#aa8760");
ellipsoid(28, 36, 29, 3, 3, 3, "#c0a078");
box(27, 35, 31, 30, 37, 33, "#b7956d");
box(27, 35, 32, 30, 37, 32, "#72573d");
box(28, 35, 34, 29, 36, 34, "#c0a078");
for (let i = 0; i < 30; i++) {
  const x = 25 + Math.floor(rand() * 9);
  const y = 32 + Math.floor(rand() * 8);
  const z = 25 + Math.floor(rand() * 8);
  if (get(x, y, z) === "#aa8760" || get(x, y, z) === "#c0a078")
    set(x, y, z, rand() < 0.5 ? "#987653" : "#d0ad80");
}

// Spoked wheels on both outside faces, in the yz plane.
for (const [xa, xb, outer] of [[5, 8, 5], [39, 42, 42]]) {
  const cy = 29, cz = 12;
  for (let y = 16; y <= 42; y++) {
    for (let z = 0; z <= 24; z++) {
      const d = Math.hypot(y - cy, z - cz);
      if (d >= 10.7 && d <= 12.25) {
        for (let x = xa; x <= xb; x++)
          set(x, y, z, x === outer && d > 11.5 ? ironLight : iron);
      } else if (d >= 9.15 && d < 10.85) {
        for (let x = xa; x <= xb; x++)
          set(x, y, z, x === outer ? woodLight : woodDark);
      }
    }
  }
  for (let i = 0; i < 10; i++) {
    const a = 2 * Math.PI * i / 10;
    const dy = Math.cos(a), dz = Math.sin(a);
    for (let x = xa + 1; x <= xb - 1; x++)
      line(x, cy + dy * 2, cz + dz * 2,
           x, cy + dy * 9.5, cz + dz * 9.5, 0.8, woodLight);
    line(outer, cy + dy * 3, cz + dz * 3,
         outer, cy + dy * 9.5, cz + dz * 9.5, 0, wood);
  }
  cylinder(xa, cy, cz, 3, 4, woodDark, "x");
  cylinder(outer, cy, cz, 2, 1, iron, "x");
  set(outer, cy, cz, ironLight);

  for (let i = 0; i < 10; i++) {
    const a = 2 * Math.PI * i / 10;
    set(outer, cy + Math.round(11.5 * Math.cos(a)),
        cz + Math.round(11.5 * Math.sin(a)), "#777671");
  }
}

// Small heraldic mark on the front board.
box(22, 16, 20, 25, 16, 23, "#8e342f");
box(23, 16, 20, 24, 16, 22, "#bc9851");
set(23, 16, 23, "#bc9851");
set(24, 16, 23, "#bc9851");