fogón

← City3D assetfogon/bicicletero

Bicicletero

by fogonCC06597 blocks
BicicleteroDrag to turn it
// «Bicicletero» · gpt-6-sol (medium)
// A bike rack: a row of four bent grey steel tube loops fixed to a flat concrete strip, with one orange city bike parked in it (two wheels, a basket on the front).

// Concrete strip
box(2, 8, 0, 45, 39, 1, "#aeb4af");
box(2, 8, 2, 45, 39, 2, "#d8d9d0");
box(2, 8, 1, 45, 8, 1, "#929d9b");
box(2, 39, 1, 45, 39, 1, "#929d9b");

for (let x = 2; x <= 45; x++)
  for (let y = 8; y <= 39; y++)
    if (rand() < 0.11)
      set(x, y, 2, rand() < 0.55 ? "#c9ccc5" : "#e5e4da");

// Subtle joints between concrete slabs
for (const x of [13, 25, 37])
  box(x, 8, 2, x, 39, 2, "#b6bbb4");

// Four bent steel-tube rack loops, running front to back
for (const x of [9, 19, 29, 39]) {
  for (const y of [23, 35]) {
    box(x - 2, y - 2, 3, x + 2, y + 2, 3, "#657076");
    box(x - 1, y - 1, 4, x + 1, y + 1, 5, "#aab3b3");
  }

  const path = [
    [23, 5], [23, 15], [24, 18], [26, 20],
    [32, 20], [34, 18], [35, 15], [35, 5]
  ];
  for (let i = 0; i < path.length - 1; i++) {
    const [y0, z0] = path[i], [y1, z1] = path[i + 1];
    line(x, y0, z0, x, y1, z1, 1, "#65737a");
    line(x - 1, y0, z0, x - 1, y1, z1, 0, "#bec8c8");
  }
}

// Orange city bike, parked across the front of one rack loop
const bikeY = 17;
function tube(x0, z0, x1, z1, color = "#ed751f") {
  line(x0, bikeY, z0, x1, bikeY, z1, 1, color);
  line(x0, bikeY - 1, z0, x1, bikeY - 1, z1, 0, "#ffab44");
}
function wheel(cx) {
  const cz = 9, radius = 7.5;

  // Spokes and bright metal rim
  for (let a = 0; a < Math.PI * 2; a += Math.PI / 6) {
    line(cx, bikeY, cz,
      cx + Math.cos(a) * 6, bikeY, cz + Math.sin(a) * 6,
      0, "#aebabb");
  }
  for (let x = Math.floor(cx - 9); x <= Math.ceil(cx + 9); x++)
    for (let z = 0; z <= 18; z++) {
      const d = Math.hypot(x - cx, z - cz);
      if (d > 5.5 && d < 6.4)
        set(x, bikeY, z, "#c7d0ca");
      if (d > radius - 1.25 && d < radius + 0.7)
        for (let y = bikeY - 1; y <= bikeY + 1; y++)
          set(x, y, z, d > radius + 0.1 ? "#30383b" : "#414a4b");
    }
  box(cx - 1, bikeY - 2, cz - 1, cx + 1, bikeY + 1, cz + 1, "#d9ddcf");
  set(cx, bikeY - 2, cz, "#f4a43d");
}

wheel(14);
wheel(32);

// Frame: two unmistakable triangular sections
tube(14, 9, 21, 20);
tube(21, 20, 25, 10);
tube(25, 10, 14, 9);
tube(21, 20, 29, 19);
tube(29, 19, 25, 10);
tube(29, 19, 32, 9, "#dc641d");

// Front fork, seat post, and handlebars
tube(29, 19, 31, 25, "#788788");
line(30, bikeY, 25, 35, bikeY, 25, 1, "#65747a");
box(34, bikeY - 2, 25, 36, bikeY, 26, "#313e40");

line(21, bikeY, 19, 20, bikeY, 23, 1, "#737e7e");
box(17, bikeY - 2, 23, 23, bikeY + 1, 24, "#353f40");
box(18, bikeY - 2, 24, 22, bikeY + 1, 24, "#596365");

// Crank, pedals, chain guard, and a little painted flourish
box(24, bikeY - 2, 9, 26, bikeY + 1, 11, "#f7a43b");
line(25, bikeY - 3, 10, 27, bikeY - 3, 7, 0, "#687477");
box(26, bikeY - 4, 7, 29, bikeY - 3, 7, "#394447");
line(25, bikeY + 1, 10, 23, bikeY + 1, 13, 0, "#687477");
box(21, bikeY + 1, 13, 24, bikeY + 2, 13, "#394447");
line(15, bikeY - 2, 8, 25, bikeY - 2, 9, 0, "#f5c34a");
set(22, bikeY - 2, 16, "#ffe1a2");

// Front basket: wicker-colored walls with a dark open top
box(35, 13, 22, 43, 21, 28, "#bc8143");
box(36, 14, 23, 42, 20, 28, "#dfaa60");
box(37, 15, 26, 41, 19, 28, "#645d45");
for (const z of [23, 25, 27]) {
  box(35, 13, z, 43, 13, z, "#f0bc72");
  box(35, 21, z, 43, 21, z, "#f0bc72");
  box(43, 14, z, 43, 20, z, "#eab168");
}
box(35, 13, 29, 43, 21, 29, "#f5cb83");
box(36, 14, 29, 42, 20, 29, "#574f3c");
line(33, 16, 25, 36, 16, 26, 0, "#86908b");

// Small rear reflector and a simple lock securing the front wheel
box(9, bikeY - 2, 16, 11, bikeY, 17, "#dc4936");
line(29, 21, 12, 29, 23, 15, 1, "#313d44");
line(29, 23, 15, 32, 23, 15, 1, "#313d44");
box(31, 22, 12, 33, 23, 14, "#e8b642");