fogón

← Basics3D assetfogon/biplano-con-helice

Biplano con hélice

by fogonCC05302 blocks
Biplano con héliceDrag to turn it
// «Biplano con hélice» · gpt-6-sol (medium)
// Biplane («Biplano con hélice»).

const red = "#df3e36", redLight = "#f35347", redDark = "#a82c2b";
const cream = "#d9bd82", creamLight = "#f0d9a4", creamDark = "#a7814d";
const steel = "#747d7d", steelLight = "#aeb5ae", steelDark = "#444b4e";

// Landing gear: two chunky wheels resting on the ground.
for (const x of [16, 32]) {
  ellipsoid(x, 16, 4, 4, 2, 4, "#252a2c");
  ellipsoid(x, 14, 4, 2.6, 0.7, 2.6, "#4c5353");
  ellipsoid(x, 13, 4, 1.2, 0.5, 1.2, redDark);
  set(x, 12, 4, redLight);
  line(x, 17, 8, x < 24 ? 21 : 27, 16, 19, 0, creamDark);
  line(x, 17, 8, 24, 20, 18, 0, creamLight);
}
line(16, 17, 8, 32, 17, 8, 0, steelDark);

// Tapered red fuselage and raised cockpit coaming.
box(21, 10, 19, 27, 29, 24, red);
box(22, 28, 19, 26, 37, 22, red);
box(23, 36, 19, 25, 41, 21, redDark);
box(20, 12, 22, 28, 19, 25, redLight);
box(21, 25, 22, 27, 31, 23, redLight);
for (const x of [21, 27]) {
  line(x, 12, 24, x, 29, 21, 0, redDark);
}
box(22, 19, 25, 26, 25, 25, redDark);
box(23, 20, 25, 25, 23, 25, "#303b3d");

// Pilot, visible between the wings.
box(23, 21, 26, 25, 23, 28, "#7c8580");
box(22, 21, 27, 26, 23, 28, steelDark);
box(23, 20, 28, 25, 22, 29, creamLight);
box(23, 19, 28, 25, 19, 28, "#313b40");
set(23, 18, 28, "#c9d5d1");
set(25, 18, 28, "#c9d5d1");

// Tailplane and upright rudder.
box(15, 35, 20, 33, 39, 21, redDark);
box(16, 35, 21, 32, 38, 21, redLight);
box(20, 36, 22, 28, 39, 22, red);
box(23, 36, 22, 25, 40, 27, redDark);
box(23, 37, 25, 25, 40, 27, redLight);
box(22, 39, 25, 26, 40, 26, red);

// Lower wing: thick red panels with crisp leading edges.
for (let x = 5; x <= 43; x++) {
  const tip = x < 8 || x > 40;
  const front = tip ? 16 : 14;
  const back = tip ? 21 : 23;
  box(x, front, 18, x, back, 19, redDark);
  box(x, front, 20, x, back, 20, red);
  for (let y = front; y <= back; y++) {
    if (rand() < 0.13) set(x, y, 20, redLight);
  }
  set(x, front, 20, redLight);
}
for (const x of [9, 15, 21, 27, 33, 39]) {
  line(x, 16, 21, x, 22, 21, 0, "#ed5043");
}
box(6, 17, 18, 8, 21, 19, redLight);
box(40, 17, 18, 42, 21, 19, redLight);

// Paired cream-colored interplane struts and their cross-bracing.
for (const x of [11, 37]) {
  for (const y of [16, 22]) {
    box(x, y, 21, x + 1, y + 1, 31, creamDark);
    line(x, y, 22, x, y, 30, 0, creamLight);
  }
  line(x, 16, 22, x + 1, 22, 30, 0, cream);
  line(x + 1, 22, 22, x, 16, 30, 0, creamDark);
}
for (const x of [20, 28]) {
  line(x, 17, 25, x, 17, 32, 1, creamDark);
  line(x, 22, 25, x, 22, 32, 0, creamLight);
}

// Broad upper wing, slightly swept at its rounded-looking tips.
for (let x = 3; x <= 45; x++) {
  const tip = x < 6 || x > 42;
  const front = tip ? 15 : 13;
  const back = tip ? 21 : 23;
  box(x, front, 32, x, back, 33, redDark);
  box(x, front, 34, x, back, 34, red);
  for (let y = front; y <= back; y++) {
    if (rand() < 0.09) set(x, y, 34, redLight);
  }
  set(x, front, 34, redLight);
}
for (const x of [7, 14, 21, 28, 35, 42]) {
  line(x, 14, 35, x, 22, 35, 0, "#ed5043");
}
box(4, 16, 33, 6, 21, 34, redLight);
box(42, 16, 33, 44, 21, 34, redLight);
line(7, 23, 34, 41, 23, 34, 0, redDark);

// White-and-blue roundels with red centers on top of both wings.
for (const cx of [10, 38]) {
  for (let dx = -4; dx <= 4; dx++) {
    for (let dy = -4; dy <= 4; dy++) {
      const d = dx * dx + dy * dy;
      if (d <= 15) set(cx + dx, 18 + dy, 35, "#244f65");
      if (d <= 9) set(cx + dx, 18 + dy, 36, "#f5ede1");
    }
  }
  for (const [dx, dy] of [[0, -2], [0, 2], [-2, 0], [2, 0]]) {
    set(cx + dx, 18 + dy, 36, "#27566b");
  }
  set(cx, 18, 36, red);
  set(cx - 1, 18, 36, red);
  set(cx + 1, 18, 36, red);
}

// Exposed radial engine and steel nose below the wings.
box(20, 7, 17, 28, 12, 24, steelDark);
box(21, 6, 18, 27, 9, 23, steel);
for (const x of [21, 24, 27]) {
  box(x, 8, 16, x + 1, 11, 17, "#353d40");
  box(x, 8, 24, x + 1, 11, 25, "#4c5556");
  box(x, 7, 18, x, 7, 23, steelLight);
}
box(20, 10, 18, 21, 14, 23, redDark);
box(27, 10, 18, 28, 14, 23, redDark);
box(22, 5, 18, 26, 7, 22, "#545c5c");
box(23, 4, 18, 25, 5, 21, steelLight);

// Spinning wooden propeller, mounted at the front of the engine.
part("propeller", [24, 5, 19]);
box(23, 3, 9, 25, 4, 29, creamDark);
box(23, 2, 11, 25, 3, 27, cream);
box(23, 2, 12, 23, 2, 26, creamLight);
box(22, 3, 25, 25, 4, 29, "#b48c53");
box(23, 3, 9, 26, 4, 13, "#b48c53");
box(22, 1, 18, 26, 2, 20, steelDark);
box(23, 0, 18, 25, 1, 20, steelLight);
set(24, 0, 19, "#424b4d");
animate("propeller", { type: "spin", axis: "y", speed: 28 });
part("body", [24, 24, 0]);