3 poin oleh GN⁺ 2024-05-25 | 1 komentar | Bagikan ke WhatsApp

Penyelesaian Tabrakan Benda Tegar 2D

Definisi masalah

  • Mulai dari Mario menginjak awan hingga dua mobil bertabrakan dalam game balap, menangani tabrakan merupakan bagian yang sangat penting di sebagian besar video game.
  • Seri blog ini akan membahas matematika dan fisika nyata di balik simulasi fisika.
  • Video game adalah cara yang bagus untuk memberi konteks pada konsep-konsep ini dan membuatnya terasa kurang abstrak.

Sedikit tentang matematika

  • Artikel ini memuat cukup banyak matematika, tetapi disarankan untuk tidak merasa gentar karenanya.
  • Notasi matematika mungkin terlihat rumit, tetapi sebagian besar hanyalah aritmetika sederhana.
  • Disarankan untuk tidak takut pada matematika dan mencobanya.

Sebelum memulai

Benda tegar

  • Fisika benda tegar adalah simulasi fisika yang menangani objek yang tidak mengalami deformasi.
  • Dalam kenyataannya, semua benda mengalami deformasi pada tingkat molekuler, tetapi dalam simulasi hal ini disederhanakan dan diperlakukan sebagai benda tegar.

Deteksi tabrakan dan penyelesaian tabrakan

  • Deteksi tabrakan adalah proses untuk memeriksa objek mana di dalam adegan yang saling bertabrakan.
  • Penyelesaian tabrakan adalah proses untuk menentukan bagaimana objek yang bertabrakan harus bergerak.
  • Seri blog ini akan berfokus pada tahap penyelesaian tabrakan.

Apa yang ingin kita lakukan?

  • Sebagian besar game berjalan di dalam sebuah loop besar.
  • Pada setiap iterasi game loop, posisi objek diperbarui sesuai kecepatan saat ini.
  • Kecepatan adalah vektor yang memiliki besar dan arah.

Kecepatan

  • Kecepatan merepresentasikan perubahan posisi suatu objek selama selang waktu tertentu.
  • Posisi baru objek dihitung dengan menambahkan perpindahan, yaitu hasil perkalian kecepatan saat ini dengan selang waktu.

Penyelesaian tabrakan

  • Tujuan penyelesaian tabrakan adalah mengubah kecepatan objek setelah tabrakan agar objek tidak lagi saling menembus.
  • Kecepatan setelah tabrakan dapat dinyatakan sebagai jumlah dari kecepatan sebelum tabrakan dan perubahan kecepatan akibat tabrakan.

Apa itu tabrakan?

  • Untuk memastikan apakah dua objek sedang bertabrakan, dua syarat berikut harus terpenuhi:
    1. Bentuk geometris objek harus saling bersentuhan atau bertumpang tindih.
    2. Objek masih harus bergerak menuju tabrakan.

Normal permukaan

  • Untuk memindahkan objek sejauh mungkin dari permukaan, objek harus dipindahkan ke arah yang tegak lurus terhadap permukaan.
  • Arah ini disebut arah normal, yaitu arah yang tegak lurus terhadap permukaan.

Dot product

  • Untuk menghitung sejauh mana dua vektor menunjuk ke arah yang sama, digunakan dot product.
  • Dot product didefinisikan sebagai jumlah hasil kali elemen-elemen yang bersesuaian dari dua vektor.
  • Dari tanda dot product, kita dapat mengetahui apakah dua vektor searah atau berlawanan arah.

Kesimpulan

  • Tabrakan terjadi ketika sebuah titik pada satu objek bersentuhan dengan titik pada objek lain dan kecepatan normal relatif bernilai negatif.
  • Artikel berikutnya akan membahas fisika nyata dari tabrakan.

Opini GN⁺

  • Pentingnya simulasi fisika: Dalam pengembangan game, simulasi fisika adalah elemen penting untuk meningkatkan kesan realistis.
  • Peran matematika: Matematika adalah inti dari simulasi fisika, dan memahaminya memungkinkan kita membuat simulasi yang lebih baik.
  • Kompleksitas penyelesaian tabrakan: Penyelesaian tabrakan adalah proses yang lebih kompleks daripada sekadar memperbarui posisi objek.
  • Nilai edukatif: Artikel ini sangat membantu untuk memahami dasar-dasar simulasi fisika.
  • Pembelajaran lanjutan: Mencoba mengimplementasikan physics engine secara langsung juga merupakan cara belajar yang baik. Anda dapat merujuk pada physics engine open source seperti Box2D atau Chipmunk.

1 komentar

 
GN⁺ 2024-05-25
Opini Hacker News

Ringkasan kumpulan komentar Hacker News

  • Hey everyone, author here!

    • Ini adalah tulisan pertama dalam seri blog ini, ditujukan untuk orang yang bukan pengembang game atau yang latar belakang matematikanya tidak terlalu kuat.
    • Itulah alasan konsep-konsepnya dijelaskan secara rinci.
    • Jika ada pertanyaan, kapan saja sangat dipersilakan.
  • Oh! Look, a well-researched, deeply-explained, and interactive post.

    • Melihat nama domain dan TLD ".ski", saya kira ini penulis yang sama dengan artikel keren lainnya, ternyata orang yang berbeda.
    • Kualitas tulisannya sama-sama luar biasa bagus.
    • Saya penasaran apa rahasia di balik TLD ".ski".
  • One side project I am working on right now is a 2d space shooter I am developing with my son.

    • Saya sedang mengembangkan game tembak-menembak luar angkasa 2D bersama anak saya.
    • Saya sempat mencoba membuatnya sendiri tanpa memakai game engine, tetapi mengalami kesulitan pada masalah deteksi tabrakan.
    • Pada akhirnya saya memutuskan menggunakan Box2D.
    • Meski punya pengalaman pengembangan lebih dari 20 tahun dan latar belakang matematika, saya sadar telah meremehkan masalah ini.
  • I always enjoyed the explanation from the N game: N game tutorial

    • Saat Flash sedang populer, saya menikmati penjelasan dari game N.
  • I had fun building a TypeScript demo about this topic, involving balls that can bounce and collide. I learned a lot.

    • Saya bersenang-senang membuat demo TypeScript tentang topik ini, dengan bola-bola yang bisa memantul dan bertabrakan, dan saya belajar banyak.
    • Kode
    • Hasil/demo
  • This is great. This reminds me of Chris Hecker's Rigid Body Dynamics series from GDMag/Gamasutra that I read (checks watch) almost 30 years ago!

  • Collisions are violations of the pairwise non-intersection constraint between bodies.

    • Tabrakan adalah pelanggaran terhadap kendala non-interseksi berpasangan antar benda.
    • Gaya tumbukan adalah pengali Lagrange dari kendala tersebut.
    • Normal tumbukan adalah turunan parsial dari fungsi kendala.
  • If you want to go further and go for rigid body dynamics and constraint, I found that series of blog post very useful: Toptal blog post

    • Jika ingin mendalami rigid body dynamics dan constraint, saya merasa rangkaian tulisan blog ini sangat bermanfaat.
  • To dredge up a related oldie-but-goodie memory of blog posts: Gaffer on Games

    • Ini juga mengingatkan pada tulisan blog lama lain yang masih sangat bagus.
    • Gaffer on Games
  • Guess this is a Shameless plug but I wrote an interesting program over 12 years ago using even then very old three Js which is not quite the metal but much less abstract than today's tools.

    • Mungkin ini terdengar seperti promosi terang-terangan, tetapi saya menulis program yang menarik lebih dari 12 tahun lalu menggunakan three Js yang bahkan saat itu sudah sangat tua.
    • Program itu tidak benar-benar dekat ke metal, tetapi jauh kurang abstrak dibandingkan alat-alat masa kini.
    • Busy Boxes