4 min read

Creative Coding with Trigonometry: Animating with Math

trigonometry

math

creative coding

animation

Creative Coding with Trigonometry: Animating with Math

Mathematics and art have been intertwined for centuries, and in the realm of creative coding, trigonometry stands as one of the most powerful tools for creating mesmerizing animations. Far from being just academic theory, sine waves, cosine curves, and circular motion form the backbone of countless digital animations that feel organic and naturally beautiful.

Why Trigonometry Matters in Animation

Trigonometry describes circular and wave motion, creating patterns that our brains perceive as natural because they mirror movements found everywhere in nature—from the oscillation of a pendulum to the way light waves propagate through space.

When we use trigonometric functions in our animations, we're creating motion that has rhythm, flow, and mathematical elegance.

The Building Blocks: Sine and Cosine

Understanding the Sine Wave

The sine function creates a smooth, repetitive wave that oscillates between -1 and 1. This simple pattern becomes the foundation for countless animation effects:

1import { motion } from 'framer-motion';
2import { useEffect, useState } from 'react';
3
4const SineWaveDemo = () => {
5 const [time, setTime] = useState(0);
6
7 useEffect(() => {
8 const interval = setInterval(() => {
9 setTime(prev => prev + 0.1);
10 }, 50);
11 return () => clearInterval(interval);
12 }, []);
13
14 const yPosition = Math.sin(time) * 100;
15
16 return (
17 <div className="relative h-64 w-full bg-gray-100 flex items-center justify-center">
18 <motion.div
19 className="w-8 h-8 bg-blue-500 rounded-full"
20 animate={{ y: yPosition }}
21 transition={{ type: "tween", ease: "linear", duration: 0 }}
22 />
23 </div>
24 );
25};

This creates a ball that bounces up and down in a perfectly smooth sine wave motion. The beauty lies in how natural this movement feels—it accelerates and decelerates in a way that mimics real-world physics.

Creating Circular Motion

By combining sine and cosine with the same time parameter, we create perfect circular motion:jsx

1const CircularMotion = () => {
2 const [time, setTime] = useState(0);
3
4 useEffect(() => {
5 const interval = setInterval(() => {
6 setTime(prev => prev + 0.05);
7 }, 16);
8 return () => clearInterval(interval);
9 }, []);
10
11 const radius = 80;
12 const x = Math.cos(time) * radius;
13 const y = Math.sin(time) * radius;
14
15 return (
16 <div className="relative h-64 w-full bg-gray-100 flex items-center justify-center">
17 <motion.div
18 className="w-6 h-6 bg-red-500 rounded-full"
19 animate={{ x, y }}
20 transition={{ type: "tween", ease: "linear", duration: 0 }}
21 />
22 </div>
23 );
24};

This technique forms the basis for orbiting elements, loading spinners, and complex multi-element choreography.

Practical Applications

Wave-Based Loading Animation

One of the most elegant applications is creating loading animations that feel organic:

1const WaveLoader = () => {
2 const [time, setTime] = useState(0);
3
4 useEffect(() => {
5 const interval = setInterval(() => {
6 setTime(prev => prev + 0.1);
7 }, 50);
8 return () => clearInterval(interval);
9 }, []);
10
11 const dots = Array.from({ length: 5 }, (_, i) => {
12 const phase = i * 0.5; // Offset each dot
13 const y = Math.sin(time + phase) * 20;
14
15 return (
16 <motion.div
17 key={i}
18 className="w-3 h-3 bg-blue-500 rounded-full mx-1"
19 animate={{ y }}
20 transition={{ type: "tween", ease: "linear", duration: 0 }}
21 />
22 );
23 });
24
25 return (
26 <div className="flex items-center justify-center h-32">
27 {dots}
28 </div>
29 );
30};

This creates a wave-like loading animation where each dot follows the same sine wave but with a different phase offset, creating the illusion of a wave traveling through the dots.

Key Mathematical Concepts

Amplitude, Frequency, and Phase

These three parameters control the character of your trigonometric animations:

  • Amplitude: Controls the "height" or intensity of the wave
  • Frequency: Controls how fast the wave oscillates
  • Phase: Controls the offset or starting point of the wave

1// Basic formula: Math.sin(time * frequency + phase) * amplitude
2const amplitude = 50; // How far the element moves
3const frequency = 2; // How fast it oscillates
4const phase = 0.5; // Starting offset
5
6const position = Math.sin(time * frequency + phase) * amplitude;

Combining Functions

The real magic happens when you combine multiple trigonometric functions:

1const ComplexMotion = () => {
2 const [time, setTime] = useState(0);
3
4 useEffect(() => {
5 const interval = setInterval(() => {
6 setTime(prev => prev + 0.05);
7 }, 16);
8 return () => clearInterval(interval);
9 }, []);
10
11 // Combine horizontal and vertical sine waves with different frequencies
12 const x = Math.sin(time) * 100;
13 const y = Math.sin(time * 1.5) * 60;
14 const rotation = Math.sin(time * 2) * 45;
15
16 return (
17 <div className="relative h-64 w-full bg-gray-100 flex items-center justify-center">
18 <motion.div
19 className="w-8 h-8 bg-green-500"
20 style={{
21 transform: `translate(${x}px, ${y}px) rotate(${rotation}deg)`
22 }}
23 />
24 </div>
25 );
26};

Real-World Applications

Trigonometric animations are perfect for:

  • Loading indicators that feel organic and engaging
  • Background animations that add life without distraction
  • Interactive elements that respond naturally to user input
  • Data visualizations that reveal information progressively
  • Particle systems and generative art

Conclusion

Trigonometry transforms mathematical precision into fluid, natural motion. By understanding the basic relationship between sine, cosine, and circular motion, you can create animations that feel organic and engaging. Start with simple sine waves, experiment with different frequencies and amplitudes, and gradually combine functions to create more complex behaviors.

The key is to remember that these mathematical functions are tools for storytelling—use them to enhance user experience, guide attention, and create moments of delight in your digital interfaces. Whether you're building a simple loading animation or a complex interactive visualization, trigonometry provides the mathematical foundation for motion that feels both purposeful and beautiful.

Back to blog

No more articles