Tampilkan postingan dengan label Vektor R2. Tampilkan semua postingan
Tampilkan postingan dengan label Vektor R2. Tampilkan semua postingan

Jumat, 11 November 2016

Manfaat Vektor R2 Untuk Pemrograman Game



Rekan-rekan sekalian.....barang siapa yang ingin belajar membuat game....sepertinya tidaklah lengkap jika tidak belajar tentang vektor R2 (klik disini jika ingin melihat artikel teori tentang vektor R2).

Benar rekan-rekan sekalian, vektor di pemrograman game adalah nyawa atau denyut nadinya, tanpa vektor tidak mungkin rasanya program game bisa jalan. Di balik setiap game yang kita buat, walaupun game yang sangat sederhana sekalipun, terselip satu matematika yang bernama vektor.

Untuk lebih mengenalnya berikut ini ogut berikan contoh-contoh program yang menggunakan vektor untuk menyelesaikan perhitungan matematikanya.


Perhatikan peluru yang dilepaskan pesawat di atas, jika peluru mengenai tembok, maka peluru akan memantul. Untuk menghitung pantulan peluru ogut menggunakan vektor, lebih lengkapnya rekan-rekan dapat membaca artikel tersebut disini.

Contoh lain dari manfaat vektor dapat rekan-rekan lihat pada gambar di bawah ini.


Moncong canon akan selalu mengarah ke pesawat kemanapun pesawat bergerak. Dengan memperhitungkan sudut vektor maka masalah di atas dapat diselesaikan.

Membuat bom juga menggunakan vektor (Klik disini untuk belajar membuat bom pesawat).


Masih banyak lagi perhitungan matematika yang bisa diselesaikan dengan menggunakan vektor,oleh sebab itu tunggu apa lagi....mari belajar vektor.

Salam Hangat


Heriady
heriady.yoh@gmail.com


-----------------------------------------------------------------------
-----------------------------------------------------------------------

Minggu, 17 Januari 2016

Mencari Titik Pusat Persegi Panjang Dengan Vektor



Hai rekan-rekan sekalian, salam sejahterah selalu, pada kesempatan kali ini ogut akan memberikan teori tentang mencari tiik pusat sebuah persegi panjang dengan menggunakan vektor R2. Teori ini berhubungan dengan teori dasar vektor R2, oleh sebab itu sebaiknya Anda membaca artikel teori tentang vektor R2 jika Anda belum menguasainya.

Kenapa ogut menulis artikel ini, karena banyak pertanyaan dari rekan-rekan yang ingin belajar tentang game terutama tentang vektor. Untuk itu ogut sengaja menyisipkan artikel ini di antara artikel-artikel yang lain.

Ok kita mulai ya....perhatikanlah gambar di bawah ini. Disitu terdapat sebuah persegi panjang ABCD,


Jika persegi panjang posisinya sejajar dengan sumbu X dan sumbu Y, maka untuk mencari titik pusat persegi panjang tidaklah sulit. Anda cukup membagi dua lebar dan tinggi persegi panjang seperti gambar di bawah ini.


Tetapi jika posisi persegi panjang seperti gambar berikut ini, maka tidaklah mudah untuk menentukan titik pusat koordinatnya.


Untuk itu diperlukan vektor yang akan membantu menyelesaaikan masalah ini. Buatlah sebuah vektor dari titik A ke titik C, seperti yang terlihat di bawah ini.


Lalu kalikan vektor tersebut dengan skala 0,5. Sehingga vektor dari titik A ke titik C panjangnya menjadi setengah. Dengan menggunakan vektor yang sudah di-skala maka titik pusat persegi panjang dapat diketahui.


Demikianlah rekan-rekan, mudah bukan, teori ini sangat bermanfaat untuk pemrograman game, contohnya saat Anda hendak menghitung deteksi tabrakan antar objek game.


Salam Hangat Selalu


Heriady
heriady.yoh@gmail.com


Artikel terkait
Membuat Bayangan Objek 3D OpenGL

Matematika Vektor R2

Program Animasi Game MoTer 3D dengan OpenGL

Senin, 11 Januari 2016

Program Deteksi Tumbukan / Tabrakan Dengan Sudut Vektor



Selamat Pagi, artikel kali ini akan membahas tentang deteksi tabrakan / tumbukan dengan menggunakan sudut vektor. Setelah sebelumnya ogut menulis artikel tentang algoritma deteksi tabrakan dengan sudut vektor, sekarang saatnya memberikan contoh program OpenGL-nya.


Algoritma tidak akan ogut bahas di sini, sehingga agar tidak bingung sebaiknya rekan-rekan membaca teorinya terlebih dahulu di link ini.


Tabrakan akan terjadi antara objek segitiga ABC dan titik P jika memenuhi 3 kondisi berikut ini:


Kondisi I : Sudut A° = Sudut AB° + Sudut AC°


Kondisi II : Sudut B° = Sudut BA° + Sudut BC°


Kondisi III : Sudut C° = Sudut CA° + Sudut CB°


Sudut antara dua vektor dapat Anda hitung dengan rumus tertentu, untuk mengetahuinya silahkan klik link ini.

Untuk membuat program deteksi tumbukan / tabrakan ini caranya mudah, perhatikanlah sebagian source code program ini.

Public Structure SegitigaObjek_Properties
        Public GO_Active As Boolean

        Public Ax As Single
        Public Ay As Single
        Public Bx As Single
        Public By As Single
        Public Cx As Single
        Public Cy As Single

        Public VektorAB As Vektor_Properties
        Public VektorAC As Vektor_Properties
        Public VektorBA As Vektor_Properties
        Public VektorBC As Vektor_Properties
        Public VektorCA As Vektor_Properties
        Public VektorCB As Vektor_Properties

        Public Hit_Status As Boolean
    End Structure

Public Sub SettingNilaiAwal()
        ...
        ...
        ...

        '======================
        'nilai awal untuk bonus
        '======================
        'Bonus(0)
        Bonus(0).Ax = 25 : Bonus(0).Ay = 125
        Bonus(0).Bx = 225 : Bonus(0).By = 225
        Bonus(0).Cx = 225 : Bonus(0).Cy = 475
        Bonus(0).Hit_Status = False

        TitikPusatBonus0X = 150 : TitikPusatBonus0Y = 300

        'Bonus(1)
        Bonus(1).Ax = -375 : Bonus(1).Ay = -175
        Bonus(1).Bx = -225 : Bonus(1).By = -175
        Bonus(1).Cx = -225 : Bonus(1).Cy = -25
        Bonus(1).Hit_Status = False

        TitikPusatBonus1X = -300 : TitikPusatBonus1Y = -100

 End Sub

Private Sub Render_Peluru()
        Dim i As Integer
        Dim SkalaPro1, SkalaPro2 As Single
        Dim Vektor_AP As Vektor_Properties
        Dim Vektor_BP As Vektor_Properties
        Dim Vektor_CP As Vektor_Properties
        Dim SudutA, SudutAB, SudutAC As Single
        Dim SudutB, SudutBA, SudutBC As Single
        Dim SudutC, SudutCA, SudutCB As Single

        Dim ToleransiSudut_Atas As Single
        Dim ToleransiSudut_Bawah As Single

        For i = 0 To 98
            If Peluru_Fighter(i).GO_Active Then

                '=====================================================
                'periksa apakah peluru di dalam area tembak atau tidak
                '=====================================================
                'hitung titik pusat peluru (titik P)
                Titik_Pusat_Poligon(Peluru_Fighter(i), CenterX_Peluru, CenterY_Peluru)
                'create vektor peluru
                VektorPeluru = Create_Vektor(Area_Tembak_Xmin, Area_Tembak_Ymin, CenterX_Peluru, CenterY_Peluru)
                'hitung skala proyeksi
                SkalaPro1 = Dot_Product(VektorPeluru, VektorA) / (LVektorA * LVektorA)
                SkalaPro2 = Dot_Product(VektorPeluru, VektorB) / (LVektorB * LVektorB)

                If (SkalaPro1 >= 0 And SkalaPro1 <= 1 And SkalaPro2 >= 0 And SkalaPro2 <= 1) Then

                    '=====================================================
                    'peluru berada di area tembak
                    'proses deteksi tabrakan dengan bonus/segitiga dimulai
                    '=====================================================
                    For j = 0 To 1

                        'di Titik A
                        Bonus(j).VektorAB = Create_Vektor(Bonus(j).Ax, Bonus(j).Ay, Bonus(j).Bx, Bonus(j).By)
                        Bonus(j).VektorAC = Create_Vektor(Bonus(j).Ax, Bonus(j).Ay, Bonus(j).Cx, Bonus(j).Cy)
                        Vektor_AP = Create_Vektor(Bonus(j).Ax, Bonus(j).Ay, CenterX_Peluru, CenterY_Peluru)

                        SudutA = Sudut_Vektor(Bonus(j).VektorAB, Bonus(j).VektorAC)
                        SudutAB = Sudut_Vektor(Bonus(j).VektorAB, Vektor_AP)
                        SudutAC = Sudut_Vektor(Bonus(j).VektorAC, Vektor_AP)

                        ToleransiSudut_Bawah = SudutAB + SudutAC - Toleransi
                        ToleransiSudut_Atas = SudutAB + SudutAC + Toleransi

                        'jika bandingkan jumlah sudut AB dan sudut AC dengan sudut A
                        If SudutA <= ToleransiSudut_Atas And SudutA >= ToleransiSudut_Bawah Then

                            'kondisi pertama memenuhi, periksa dengan titik B
                            Bonus(j).VektorBA = Create_Vektor(Bonus(j).Bx, Bonus(j).By, Bonus(j).Ax, Bonus(j).Ay)
                            Bonus(j).VektorBC = Create_Vektor(Bonus(j).Bx, Bonus(j).By, Bonus(j).Cx, Bonus(j).Cy)
                            Vektor_BP = Create_Vektor(Bonus(j).Bx, Bonus(j).By, CenterX_Peluru, CenterY_Peluru)

                            SudutB = Sudut_Vektor(Bonus(j).VektorBA, Bonus(j).VektorBC)
                            SudutBA = Sudut_Vektor(Bonus(j).VektorBA, Vektor_BP)
                            SudutBC = Sudut_Vektor(Bonus(j).VektorBC, Vektor_BP)

                            ToleransiSudut_Bawah = SudutBA + SudutBC - Toleransi
                            ToleransiSudut_Atas = SudutBA + SudutBC + Toleransi

                            'jika bandingkan jumlah sudut BA dan sudut BC dengan sudut B
                            If SudutB <= ToleransiSudut_Atas And SudutB >= ToleransiSudut_Bawah Then

                                'kondisi kedus memenuhi, periksa dengan titik C
                                Bonus(j).VektorCA = Create_Vektor(Bonus(j).Cx, Bonus(j).Cy, Bonus(j).Ax, Bonus(j).Ay)
                                Bonus(j).VektorCB = Create_Vektor(Bonus(j).Cx, Bonus(j).Cy, Bonus(j).Bx, Bonus(j).By)
                                Vektor_CP = Create_Vektor(Bonus(j).Cx, Bonus(j).Cy, CenterX_Peluru, CenterY_Peluru)

                                SudutC = Sudut_Vektor(Bonus(j).VektorCA, Bonus(j).VektorCB)
                                SudutCA = Sudut_Vektor(Bonus(j).VektorCA, Vektor_CP)
                                SudutCB = Sudut_Vektor(Bonus(j).VektorCB, Vektor_CP)

                                ToleransiSudut_Bawah = SudutCA + SudutCB - Toleransi
                                ToleransiSudut_Atas = SudutCA + SudutCB + Toleransi

                                'jika bandingkan jumlah sudut CA dan sudut CB dengan sudut C
                                If SudutC <= ToleransiSudut_Atas And SudutC >= ToleransiSudut_Bawah Then
                                    'tiga kondisi memenuhi, jadi tabrakan etrjadi antara peluru dan segitiga/bonus
                                    Peluru_Fighter(i).GO_Active = False
                                    Bonus(j).Hit_Status = True
                                    Sound2.Play()
                                End If

                            End If 'If SudutB <= ToleransiSudut_Atas And SudutB >= ToleransiSudut_Bawah Then

                        End If 'If SudutA <= ToleransiSudut_Atas And SudutA >= ToleransiSudut_Bawah Then

                    Next

                Else
                    'non aktifkan peluru yang tidak di dalam area tembak
                    Peluru_Fighter(i).GO_Active = False
                End If
            End If

            If Peluru_Fighter(i).GO_Active Then
                GL.Enable(EnableCap.Blend)
                GL.BlendFunc(BlendingFactorSrc.DstColor, BlendingFactorDest.Zero)

                'Mask
                GL.BindTexture(TextureTarget.Texture2D, Peluru_FBMP_Mask)
                GL.Begin(BeginMode.Quads)
                GL.TexCoord2(0.0, 0.0) : GL.Vertex2(Peluru_Fighter(i).Ax, Peluru_Fighter(i).Ay)
                GL.TexCoord2(1.0, 0.0) : GL.Vertex2(Peluru_Fighter(i).Bx, Peluru_Fighter(i).By)
                GL.TexCoord2(1.0, 1.0) : GL.Vertex2(Peluru_Fighter(i).Cx, Peluru_Fighter(i).Cy)
                GL.TexCoord2(0.0, 1.0) : GL.Vertex2(Peluru_Fighter(i).Dx, Peluru_Fighter(i).Dy)
                GL.End()

                GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.One)
                'BMP
                GL.BindTexture(TextureTarget.Texture2D, Peluru_FBMP)
                GL.Begin(BeginMode.Quads)
                GL.TexCoord2(0.0, 0.0) : GL.Vertex2(Peluru_Fighter(i).Ax, Peluru_Fighter(i).Ay)
                GL.TexCoord2(1.0, 0.0) : GL.Vertex2(Peluru_Fighter(i).Bx, Peluru_Fighter(i).By)
                GL.TexCoord2(1.0, 1.0) : GL.Vertex2(Peluru_Fighter(i).Cx, Peluru_Fighter(i).Cy)
                GL.TexCoord2(0.0, 1.0) : GL.Vertex2(Peluru_Fighter(i).Dx, Peluru_Fighter(i).Dy)
                GL.End()

                GL.Disable(EnableCap.Blend)

                If CheckBox2.Checked = True Then
                    'warna merah untuk garis
                    GL.BindTexture(TextureTarget.Texture2D, Red)

                    GL.Begin(BeginMode.LineLoop)
                    GL.Vertex2(Peluru_Fighter(i).Ax, Peluru_Fighter(i).Ay)
                    GL.Vertex2(Peluru_Fighter(i).Bx, Peluru_Fighter(i).By)
                    GL.Vertex2(Peluru_Fighter(i).Cx, Peluru_Fighter(i).Cy)
                    GL.Vertex2(Peluru_Fighter(i).Dx, Peluru_Fighter(i).Dy)
                    GL.End()
                End If

                '=================================
                'translasi peluru dengan vektornya
                '=================================
                Peluru_Fighter(i).Ax = Peluru_Fighter(i).Ax + Peluru_Fighter(i).Vektor.i
                Peluru_Fighter(i).Bx = Peluru_Fighter(i).Bx + Peluru_Fighter(i).Vektor.i
                Peluru_Fighter(i).Cx = Peluru_Fighter(i).Cx + Peluru_Fighter(i).Vektor.i
                Peluru_Fighter(i).Dx = Peluru_Fighter(i).Dx + Peluru_Fighter(i).Vektor.i

                Peluru_Fighter(i).Ay = Peluru_Fighter(i).Ay + Peluru_Fighter(i).Vektor.j
                Peluru_Fighter(i).By = Peluru_Fighter(i).By + Peluru_Fighter(i).Vektor.j
                Peluru_Fighter(i).Cy = Peluru_Fighter(i).Cy + Peluru_Fighter(i).Vektor.j
                Peluru_Fighter(i).Dy = Peluru_Fighter(i).Dy + Peluru_Fighter(i).Vektor.j

            End If
        Next
    End Sub

Demikian rekan-rekan isi dari artikel kali ini, ogut berharap artikel ini berguna sebagai alternatif bagi rekan-rekan yang ingin belajar membuat game sendiri.

Salam


Heriady
heriady.yoh@gmail.com




Artikel terkait
Algoritma Deteksi Tabrakan Objek Game Dengan Sudut Vektor

Deteksi Tabrakan Game OpenGL (Segitiga dan Titik)

Menghitung Luas Segitiga dengan Vektor

Teori Deteksi Tabrakan Objek Segitiga dan Titik

Deteksi Tabrakan dengan (Skala) Proyeksi Vektor

Mendeteksi Posisi dengan Vektor Proyeksi

Animasi Game 2D dengan Translasi

Deteksi Tabrakan dengan Panjang Vektor / Radius

Vektor R2

Minggu, 10 Januari 2016

Algoritma Deteksi Tabrakan Objek Game Dengan Sudut Vektor

Hai-hai, selamat pagi semuanya, kembali lagi ogut nge-blog dan kali ini ogut akan menjelaskan teori deteksi tumbukan / tabrakan objek game dengan menggunakan sudut vektor.

Yang ogut bahas kali ini hanya teorinya saja, program contoh belum ogut buat tetapi akan segera ogut buat dan ogut posting untuk membuktikan teori yang ogut tulis kali ini.

Ok kita langsung saja ya....serius nih....

Perhatikanlah gambar di bawah ini, segitiga ABC dan sebuah titik P.


Jika titik P berada di dalam segitiga ABC maka terjadi tabrakan / tumbukan, untuk menentukan terjadinya tabrakan atau tidak antara titik P dan segitiga ABC, gunakan sudut vektor seperti berikut ini.

Kita mulai dari titik A. buat dua vektor yaitu vektor AB dan vektor AC, lalu hitung sudut yang dibentuk kedua vektor (sudut A°)


Langkah selanjutnya, buat vektor AP, lalu hitung sudut antara vektor AB dengan vektor AP (sudut AB°) lalu hitung juga sudut antara vektor AC dengan vekotr AP (sudut AC°).

Kondisi I : Sudut A° = Sudut AB° + Sudut AC°


Kita Lanjut ke titik B, buat dua vektor yaitu vektor BA dan vektor BC, Hitung sudut antara vektor BA dan vektor BC (sudut B°)


Berikutnya, buat vektor BP seperti gambar di bawah ini. Hitung sudut antara vektor BA dan vektor BP (sudut BA°). Lalu hitung juga sudut antara vektor BC dan vektor BP (sudut BC°)

Kondisi II : Sudut B° = Sudut BA° + Sudut BC°


Terakhir titik C, buat dua buah vektor yaitu vektor CA dan vektor CB, kemudian hitung sudut antara kedua vektor tersebut (sudut C°).


Langkah terakhir buat vektor CP, lalu hitung sudut antara vektor CA dan vektor CP (sudut CA°). Kemudian hitung juga sudut antara vektor CB dan vektor CP (sudut CB°).

Kondisi III : Sudut C° = Sudut CA° + Sudut CB°


Jadi kesimpulannya, jika 3 kondisi di atas memenuhi, maka dapat dipastikan  titik P berada di dalam segitiga ABC.

Update 11 Jan 2016

Program Deteksi Tabrakan Dengan Sudut Vektor sudah ogut buat dan ogut posting, klik link ini untuk menuju ke artikelnya. Dan bagi rekan-rekan yang belum pernah belajar tentang vektor R2, Anda dapat klik link  ini.


Demikian rekan-rekan teori sederhana ini ogut tulis di blog ini, semoga bermanfaat dan dapat menjadi alternatif bagi Anda para programmer untuk membuat game 2D, selamat berkarya.

Salam


Heriady
heriady.yoh@gmail.com


Artikel terkait

Program Deteksi Tumbukan / Tabrakan Dengan Sudut Vektor

Deteksi Tabrakan Game OpenGL (Segitiga dan Titik)

Menghitung Luas Segitiga dengan Vektor

Teori Deteksi Tabrakan Objek Segitiga dan Titik

Deteksi Tabrakan dengan (Skala) Proyeksi Vektor

Mendeteksi Posisi dengan Vektor Proyeksi

Animasi Game 2D dengan Translasi

Deteksi Tabrakan dengan Panjang Vektor / Radius

Vektor R2

Sabtu, 09 Januari 2016

Menghitung Luas Segitiga dengan Vektor



Selamat Pagi rekan-rekan sekalian, kali ini ogut akan membagikan artikel untuk melengkapi artikel deteksi tabrakan objek game (antara objek segitiga dan titik) yang telah ogut tulis sebelumnya.

Artikel kali ini akan membahas cara untuk menghitung luas segitiga dengan memanfaatkan vektor. Luas segitiga ogut pakai untuk mendeteksi tabrakan antara objek segitiga dan titik, sehingga bagi rekan-rekan yang masih bingung cara untuk menghitung luas segitiga dengan vektor inilah penjelasannya.


Perhatikanlah gambar di atas, dari gambar tersebut sebuah segitiga pasti mempunyai alas dan tinggi. Untuk menghitung luas segitiga merah tersebut caranya mudah saja kalikan alas dan tinggi lalu bagi 2.

Luas Segitiga Merah = 0.5 x alas x tinggi

Untuk mencari nilai tinggi segitiga merah kita beri nama untuk masing-masing titik koordinat dengan A, B dan C, seperti gambar berikut ini.


Lalu buat dua buah vektor BA dan BC.


Untuk memahami cara membuat vektor rekan-rekan bisa membaca artikel tentang vektor R2 di link ini. Berikutnya proyeksikan vektor BA ke vektor BC sehingga menghasilkan Vektor Proyeksi, seperti gambar di bawah ini.


Lalu buat Vektor Tinggi seperti gambar berikut, Vektor Tinggi dapat dihitung dengan cara Vektor BA dikurangi Vektor Proyeksi.


Sehingga

Vektor BA = Vektor Proyeksi + Vektor Tinggi

atau

Vektor Tinggi = Vektor BA - Vektor Proyeksi

Dengan diketahuinya Vektor Tinggi, maka panjang Vektor Tinggi dapat diketahui dan tinggi segitiga merah juga akan diketahui. Dengan diketahui alas dan tinggi segitiga merah maka luas segitiga akan dapat dihitung.

Untuk membaca teori tentang deteksi tabrakan segitga dan titik yang menggunakan luas segitiga rekan-rekan bisa klik link berikut ini.


Dan contoh program deteksi tabrakan objek segitiga dengan titik sudah ogut bahas, rekan-rekan tinggal klik link ini.


Demikianlah rekan-rekan cara mencari luas segitiga dengan menggunakan vektor, semoga penjelasan sederhana ini berguna.

Salam Matematika Vektor


Heriady
heriady.yoh@gmail.com


 Artikel terkait
Algoritma Deteksi Tabrakan Objek Game Dengan Sudut Vektor

Teori Deteksi Tabrakan Objek Segitiga dan Titik

Deteksi Tabrakan Game OpenGL (Segitiga dan Titik)

Deteksi Tabrakan dengan (Skala) Proyeksi Vektor

Mendeteksi Posisi dengan Vektor Proyeksi

Animasi Game 2D dengan Translasi

Deteksi Tabrakan dengan Panjang Vektor / Radius

Vektor R2