fogón

← BásicoObjeto 3Dfogon/tijera

Tijera

de fogonCC02680 bloques
TijeraArrastrá para girarlo
// «Tijera» · gpt-6-sol (medium)
// Scissors («Tijera»). Be faithful to the reference: keep thin parts thin (1–2 blocks: strings, necks, handles, legs, rods), keep its exact proportions and silhouette, and every visible detail (books on shelves, sound holes, tuning pegs, valves). Don't make it chunkier than the reference.

// Two red finger loops, lying flat.
function fingerLoop(cx, cy, rx, ry, holeX, holeY, hx, hy) {
  for (let x = Math.floor(cx - rx); x <= Math.ceil(cx + rx); x++) {
    for (let y = Math.floor(cy - ry); y <= Math.ceil(cy + ry); y++) {
      const outer = ((x - cx) / rx) ** 2 + ((y - cy) / ry) ** 2;
      const inner = ((x - holeX) / hx) ** 2 + ((y - holeY) / hy) ** 2;
      if (outer > 1 || inner < 1) continue;

      for (let z = 0; z <= 7; z++) {
        let color;
        if (z <= 1) color = "#922a2b";
        else if (z <= 4) color = y > cy ? "#b93534" : "#c9443c";
        else color = y < cy ? "#ed6554" : "#df4c43";

        // Dark inner walls make the holes legible from above.
        if (inner < 1.45 && z < 7) color = "#a83230";
        if (z === 7 && rand() < 0.13) color = "#f27760";
        set(x, y, z, color);
      }
    }
  }
}

fingerLoop(26, 29, 8, 9, 26, 29, 4.2, 5);
fingerLoop(35, 12, 10, 7, 35, 12, 6.2, 3.6);

// Narrow red shanks leading into the crossing.
line(19, 20, 7, 22, 24, 7, 1, "#c8423b");
line(19, 19, 8, 26, 16, 8, 1, "#d64b40");
box(17, 18, 7, 20, 21, 9, "#bb3935");
set(18, 19, 10, "#f06a50");

// Long, slim steel blade extending left from the joint.
for (let i = 0; i <= 25; i++) {
  const t = i / 25;
  const x = Math.round(18 - 17 * t);
  const y = Math.round(19 + 17 * t);
  const z = Math.round(10 - 2 * t);
  set(x, y, z, i % 3 === 0 ? "#778996" : "#536674");
  set(x, y, z + 1, i % 4 === 0 ? "#a3afb2" : "#788891");
  if (i < 23) set(x + 1, y, z, "#354a59");
  // Small regular notches along the outer edge.
  if (i > 2 && i < 24 && i % 2 === 0)
    set(x, y + 1, z, "#435967");
}
set(1, 36, 8, "#657783");

// The second blade rises sharply from the hinge, tapering to a fine point.
for (let z = 10; z <= 32; z++) {
  const t = (z - 10) / 22;
  const x = Math.round(18 - 2 * t);
  const y = Math.round(19 + 3 * t);
  const width = z < 19 ? 2 : z < 26 ? 1 : 0;
  for (let dx = -width; dx <= width; dx++) {
    if (dx === -width && z % 3 === 0 && z > 20) continue;
    set(x + dx, y, z,
      dx < 0 ? "#425969" : dx > 0 ? "#85959b" :
      z % 4 === 0 ? "#d2d4c8" : "#a7b4b5");
  }
}
set(16, 22, 33, "#dce0d5");

// Small warm brass fastening around the base of the upright blade.
for (let z = 15; z <= 18; z++) {
  const x = z >= 17 ? 17 : 18;
  box(x - 2, 18, z, x + 2, 20, z,
    z === 15 ? "#94651d" : z === 18 ? "#f5c447" : "#d69a28");
}
set(18, 17, 17, "#ffe077");
set(19, 18, 16, "#ffd259");
set(17, 17, 18, "#fff0a1");