// FormaGeometrica: o herói de formas. Um corpo de 500 px que vira círculo → flor → quadrado sem parar, girando, // cercado por um anel de 14 marcadores que trocam de forma junto. Tudo em um SVG, sem imagem. import React from 'react'; import {useCurrentFrame} from 'remotion'; import {COR, c01, e3, eb, seg} from '../base'; const raio = (fase: number, ang: number, R: number) => { // fase 0 círculo, 1 flor de 5 pétalas, 2 quadrado arredondado, 3 volta ao círculo const circ = R, flor = R * (0.7 + 0.3 * Math.cos(5 * ang)), q = R * 0.86 / Math.max(Math.abs(Math.cos(ang)), Math.abs(Math.sin(ang))); const i = Math.floor(fase) % 3, t = e3(fase - Math.floor(fase)); const A = [circ, flor, q][i], B = [flor, q, circ][i]; return A + (B - A) * t; }; const caminho = (fase: number, R: number, rot: number) => { const pts = Array.from({length: 96}, (_, k) => {const a = (k / 96) * Math.PI * 2, r = raio(fase, a, R); return `${(Math.cos(a + rot) * r).toFixed(1)},${(Math.sin(a + rot) * r).toFixed(1)}`;}); return `M${pts.join('L')}Z`; }; export type FormaGeometricaProps = {cor?: string; corAnel?: string; inicio?: number; y?: number; /** quadros por troca de forma */ periodo?: number; /** v2: um motivo por vez. O anel de marcadores e o contorno extra só entram com `anel: true` (e aí sem legenda junto). */ anel?: boolean; raio?: number}; export const FormaGeometrica: React.FC = ({cor = COR.creme, corAnel = COR.vermelho, inicio = 0, y = 740, periodo = 24, anel = false, raio: R0 = 250}) => { const f = useCurrentFrame(); const en = eb(seg(f, inicio, inicio + 16)), fase = Math.max(0, f - inicio) / periodo; const rot = (f - inicio) * 0.035; return {anel && } {anel && } {anel && Array.from({length: 14}, (_, k) => { const a = (k / 14) * Math.PI * 2 + rot * 1.3, x = Math.cos(a) * 400, yy = Math.sin(a) * 400; return ; })} ; };