Remotion: Verschieben als Gelenkart, Pinos Blick per Verschieben statt Drehen, Noa winkt dezent
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
c2e5a95846
commit
21dc54ef90
2 changed files with 19 additions and 5 deletions
|
|
@ -90,7 +90,15 @@ const pinoWerte = (f: number) => {
|
|||
gelenk('pino', 'ohr_rechts', -ohr * 0.7),
|
||||
gelenk('pino', 'arm_links', freude(f) * 12),
|
||||
gelenk('pino', 'arm_rechts', -freude(f) * 10),
|
||||
gelenk('pino', 'kopf', feder((g) => pinoKopfKurve(g) + (g > 150 && g < 176 ? 4 * Math.sin((g - 150) * 0.5) : 0), f, {steifheit: 0.1, daempfung: 0.2})),
|
||||
{
|
||||
name: 'kopf_blick',
|
||||
art: 'verschieben',
|
||||
um: [0, 0],
|
||||
dx: feder((g) => (g > 150 && g < 176 ? 5 * Math.sin((g - 150) * 0.5) : pinoKopfKurve(g) * -0.4), f, {steifheit: 0.12, daempfung: 0.22}),
|
||||
dy: feder((g) => pinoKopfKurve(g) * 0.9, f, {steifheit: 0.1, daempfung: 0.2}),
|
||||
gewicht: {maske: 'pino/einfluss/kopf'},
|
||||
},
|
||||
gelenk('pino', 'kopf', feder(pinoKopfKurve, f, {steifheit: 0.1, daempfung: 0.2}) * 0.25),
|
||||
gelenk('pino', 'fuss_rechts', f > 190 && f < 226 ? -10 * Math.abs(Math.sin((f - 190) * 0.35)) : 0),
|
||||
{name: 'atmen', art: 'stauchen', um: [420, 600], sx: 1 + atmen * 0.01, sy: 1 + atmen * 0.014, gewicht: kreis(420, 540, 70, 170)},
|
||||
];
|
||||
|
|
@ -104,8 +112,8 @@ const noaNeigen = (f: number) => kurve(f, [[0, 0], [180, 0], [192, 3], [204, -3]
|
|||
|
||||
const noaWerte = (f: number) => {
|
||||
const kopf = feder(noaKopfKurve, f, {steifheit: 0.1, daempfung: 0.2});
|
||||
const arm = feder((g) => kurve(g, [[0, 0], [58, 0], [74, -75], [118, -75], [134, 0]]), f, {steifheit: 0.15, daempfung: 0.25});
|
||||
const winken = f > 76 && f < 118 ? 18 * Math.sin((f - 76) * 0.45) : 0;
|
||||
const arm = feder((g) => kurve(g, [[0, 0], [58, 0], [70, -16], [122, -16], [134, 0]]), f, {steifheit: 0.15, daempfung: 0.25});
|
||||
const winken = f > 72 && f < 120 ? 16 * Math.sin((f - 72) * 0.5) : 0;
|
||||
const hoch = noaHuepfer(f) * 22;
|
||||
// Zöpfe hängen nach: reagieren auf Kopf, Neigen und Hüpfen
|
||||
const schwung = (g: number) => -noaKopfKurve(g) * 1.2 - noaNeigen(g) * 3 + noaHuepfer(g) * 10;
|
||||
|
|
@ -116,7 +124,7 @@ const noaWerte = (f: number) => {
|
|||
gelenk('noa', 'zopf_rechts', zopf),
|
||||
gelenk('noa', 'daumen_rechts', winken * 0.8),
|
||||
gelenk('noa', 'hand_rechts', winken),
|
||||
gelenk('noa', 'arm_rechts', arm + winken * 0.3),
|
||||
gelenk('noa', 'arm_rechts', arm + winken * 0.15),
|
||||
gelenk('noa', 'arm_links', 3 * Math.sin(f * 0.06) + noaHuepfer(f) * 8),
|
||||
gelenk('noa', 'kopf', kopf),
|
||||
{name: 'atmen', art: 'stauchen', um: [115, 300], sx: 1 + atmen * 0.006, sy: 1 + atmen * 0.01, gewicht: kreis(115, 240, 40, 120)},
|
||||
|
|
|
|||
|
|
@ -13,7 +13,10 @@ import type {FigurDaten} from '../figuren';
|
|||
export type Gewicht = ((x: number, y: number) => number) | {maske: string};
|
||||
|
||||
type Basis = {name: string; um: [number, number]; gewicht: Gewicht};
|
||||
export type Knochen = (Basis & {art: 'drehen'; grad: number}) | (Basis & {art: 'stauchen'; sx: number; sy: number});
|
||||
export type Knochen =
|
||||
| (Basis & {art: 'drehen'; grad: number})
|
||||
| (Basis & {art: 'stauchen'; sx: number; sy: number})
|
||||
| (Basis & {art: 'verschieben'; dx: number; dy: number});
|
||||
|
||||
const RAND = 0.35; // Platz um das Bild, falls Teile über den Rand hinausschwingen
|
||||
const ZELLE = 3; // Gitterweite in Bildpixeln
|
||||
|
|
@ -57,6 +60,9 @@ const verforme = (n: number, x: number, y: number, knochen: Knochen[], gewichte:
|
|||
const dy = py - uy;
|
||||
px = ux + dx * Math.cos(a) - dy * Math.sin(a);
|
||||
py = uy + dx * Math.sin(a) + dy * Math.cos(a);
|
||||
} else if (k.art === 'verschieben') {
|
||||
px += k.dx * w;
|
||||
py += k.dy * w;
|
||||
} else {
|
||||
px = ux + (px - ux) * (1 + (k.sx - 1) * w);
|
||||
py = uy + (py - uy) * (1 + (k.sy - 1) * w);
|
||||
|
|
|
|||
Loading…
Reference in a new issue