Skip to content

putraaxzy/zenos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zeno's Paradox

Visualisasi paradoks Zeno pake OpenGL. Konsepnya diambil dari jurus Infinity nya Gojo di JJK - dimana makin deket ke target, makin lambat geraknya sampe ga pernah nyampe.

Apa sih ini ?

Jadi ada cube (projectile) yang terbang ke arah sphere (Gojo). Kalo infinity nyala, si cube cuma bisa maju 5% dari sisa jarak tiap frame-nya. Jadinya makin lama makin lambat, secara teori ga bakal pernah nyentuh.

Kalo infinity mati ya nabrak biasa aja.

Ini basically visualisasi dari paradoks matematika klasik - kalo mau jalan dari A ke B, harus lewatin setengah jarak dulu, terus setengahnya lagi, terus setengahnya lagi... sampe infinity. Tapi kenyataannya limit-nya tetep ada (converge).

Build

# install dulu (linux)
sudo apt install freeglut3-dev libgl1-mesa-dev cmake

# compile
mkdir build && cd build
cmake .. && make

# jalanin
./zenos

Kontrol

Simulasi

Key Fungsi
Spasi Nyalain/matiin infinity
R Reset ulang posisi cube
P Pause/resume simulasi
ESC Cabut

Kamera

Key Fungsi
1 Mode FREE - kontrol manual
2 Mode FOLLOW - track projectile
3 Mode AUTO-ORBIT - orbit otomatis
C Reset kamera ke default
Scroll Zoom in/out
Drag kiri Rotasi kamera keliling
Drag kanan Geser kamera
Arrow keys Geser kamera juga

Visual Effects

Program ini dilengkapi efek visual yang bikin makin immersive:

Barrier Effects:

  • Particle System - Partikel mengambang di sekitar barrier
  • Energy Rings - Ring energi expanding saat infinity aktif
  • Aura Rings - Hexagonal rings yang rotating

Projectile Effects:

  • Energy Trail - Jejak energi fading di belakang projectile
  • Glow Effect - Soft glow di sekeliling Gojo body

Impact Effects (Enhanced!):

  • Explosion Particles - Debris beterbangan dengan physics (gravity + bounce)
  • Shockwave Rings - Multiple expanding rings dari titik impact
  • Flying Sparks - Percikan api dengan trailing lines
  • Explosion Glow - Glowing sphere yang expanding dan fade
  • Radial Flash - Flash effect dengan gradient dari center screen
  • Camera Shake - Screen shake intensif saat impact

Camera System:

  • Smooth Interpolation - Gerakan kamera pake lerp
  • 3 Camera Modes - Free, Follow, Auto-orbit

Struktur Project

zenos/
├── CMakeLists.txt        # config cmake
├── include/
│   ├── physics.h         # struct GameState, class Physics
│   └── renderer.h        # class Renderer, camera modes, effects
└── src/
    ├── main.cpp          # setup GLUT, callbacks input
    ├── physics.cpp       # update posisi, math zeno
    └── renderer.cpp      # render OpenGL, effects, camera system

Penjelasan Tiap File

GameState (physics.h)

Nyimpen semua data simulasi:

  • gojoZ, objectZ - posisi di sumbu Z
  • isInfinityActive - barrier nyala apa engga
  • isImpact - udah nabrak belum
  • zenoSteps - udah berapa kali iterasi
  • totalTraveled - total jarak yg udah ditempuh
  • currentVelocity - kecepatan frame ini

Camera System (renderer.h)

3 mode kamera tersedia:

  • CAM_FREE - User control penuh (default)
  • CAM_FOLLOW - Otomatis track projectile
  • CAM_AUTO_ORBIT - Orbit otomatis keliling scene

Features:

  • Smooth interpolation pake lerp
  • Camera shake saat impact
  • Spherical coordinates untuk rotation

Effects System (renderer.cpp)

Effect Teknik
Barrier Particles Point sprites + additive blending
Energy Trail Line strip + vertex alpha fade
Glow Multiple layered spheres + additive blend
Distortion Rings Line loops + pulsating animation
Impact Flash Fullscreen quad + fade decay
Aura Rings Rotating hex patterns

Physics::update (physics.cpp)

Inti logikanya:

// kalo infinity nyala
if (isInfinityActive) {
    gap = jarak_sekarang - safe_distance;
    velocity = gap * 0.05;  // maju 5% dari sisa
    objectZ -= velocity;
}
// kalo mati
else {
    velocity = 0.2;  // konstan
    objectZ -= velocity;
    // cek nabrak
}

Safe distance = 3.1 (radius barrier 2.5 + radius object 0.6). Jadi cube berhenti sebelum masuk barrier.

HUD Info

Pas jalan, di kiri bawah ada info:

  • Camera mode (FREE/FOLLOW/AUTO-ORBIT)
  • Status infinity (aktif/non-aktif, warna ijo/abu)
  • Jarak total ke gojo
  • Sisa jarak ke barrier (converge ke 0)
  • Velocity sekarang (makin kecil)
  • Jumlah steps/iterasi

Di kanan atas ada kontrol hints.

Kalo infinity mati dan nabrak, muncul "IMPACT DETECTED" warna merah + flash effect.

Angka-angka

Apa Nilai
Posisi awal cube z = 15
Posisi gojo z = 0
Radius barrier 2.5
Radius object 0.6
Safe distance 3.1
Zeno fraction 5%
Normal velocity 0.2/frame
Texture size 256x256
Max particles 200
Max trail points 30
Target FPS 60

Dependencies

  • OpenGL
  • GLUT (freeglut di linux)
  • CMake 3.10+
  • Compiler C++17

Buat tugas/belajar OpenGL + matematika.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors