fix(tasarim): kapanış kartında piksel tablosunun arkası boş — dokuya bosBant/yogunluk
All checks were successful
Deploy / deploy (push) Successful in 4m30s
All checks were successful
Deploy / deploy (push) Successful in 4m30s
Bilal (24 Eyl 2026): ana sayfadaki piksel tablosunun arkasına çok piksel yığılmıştı. PixelMasonry/PikselZemin boş bant ve yoğunluk alıyor; kapanış kartı lg'de doku yalnız sol %16'da ve seyrek, altında liste üstte ortada boş bantta. DESIGN.md §10.8: kreatif ile doku üst üste binmez. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -80,11 +80,21 @@ function pixelRect(
|
||||
* (§1.1 "doğal duruş"). Durağan zemin: imleç ısı fırçasına katılmaz
|
||||
* (Bilal, 24 Eyl 2026: "üzerine gelindiğinde bir şey olmasın").
|
||||
*/
|
||||
// Varsayılan boş bant modül sabiti: her render'da yeni dizi olup useMemo'yu
|
||||
// boşa düşürmesin (rendering-hoist-jsx)
|
||||
const BOS_BANT_VARSAYILAN: [number, number] = [0.22, 0.78];
|
||||
|
||||
export function PixelMasonry({
|
||||
seed = 7,
|
||||
bosBant = BOS_BANT_VARSAYILAN,
|
||||
yogunluk = 1,
|
||||
className,
|
||||
}: {
|
||||
seed?: number;
|
||||
/** Genişliğin bu oranları arasındaki bant boş kalır (içerik orada) */
|
||||
bosBant?: [number, number];
|
||||
/** Doluluk çarpanı; 1 varsayılan, 0.6 seyrek */
|
||||
yogunluk?: number;
|
||||
className?: string;
|
||||
}) {
|
||||
const COLS = 42;
|
||||
@@ -96,8 +106,8 @@ export function PixelMasonry({
|
||||
const cx = (COLS - 1) / 2;
|
||||
const cy = (ROWS - 1) / 2;
|
||||
const maxD = Math.sqrt(cx * cx + cy * cy);
|
||||
const BAND_MIN = COLS * 0.22;
|
||||
const BAND_MAX = COLS * 0.78;
|
||||
const BAND_MIN = COLS * bosBant[0];
|
||||
const BAND_MAX = COLS * bosBant[1];
|
||||
|
||||
const sonuc: ReactNode[] = [];
|
||||
let accentIdx = 0;
|
||||
@@ -145,10 +155,10 @@ export function PixelMasonry({
|
||||
if (mcx > BAND_MIN && mcx < BAND_MAX) continue;
|
||||
// Kenarlara doğru artan doluluk
|
||||
const d = Math.sqrt((mcx - cx) ** 2 + (oy + MAKRO / 2 - cy) ** 2) / maxD;
|
||||
const density = 0.3 + 0.6 * d * d;
|
||||
const density = (0.3 + 0.6 * d * d) * yogunluk;
|
||||
if (hash(mx, my, seed) > density) {
|
||||
// Boş makro hücrede ara sıra tek küçük piksel: doku kopmasın
|
||||
if (hash(mx, my, seed + 3) < 0.25) {
|
||||
if (hash(mx, my, seed + 3) < 0.25 * yogunluk) {
|
||||
const px = ox + Math.floor(hash(mx, my, seed + 4) * MAKRO);
|
||||
const py = oy + Math.floor(hash(mx, my, seed + 5) * MAKRO);
|
||||
sonuc.push(kare(px, py, 1, `k-${mx}-${my}`, false));
|
||||
@@ -171,7 +181,7 @@ export function PixelMasonry({
|
||||
}
|
||||
}
|
||||
return sonuc;
|
||||
}, [seed]);
|
||||
}, [seed, bosBant, yogunluk]);
|
||||
|
||||
return (
|
||||
<svg
|
||||
|
||||
Reference in New Issue
Block a user