Jadual Kandungan
Isi soalan
Penyelesaian
Rumah Java Pergerakan bola Java: tingkah laku pantulan sempadan yang tidak dijangka

Pergerakan bola Java: tingkah laku pantulan sempadan yang tidak dijangka

Feb 22, 2024 pm 01:30 PM

Editor PHP Xigua memperkenalkan anda kepada siri Soal Jawab Java Isu ini membincangkan tingkah laku pantulan sempadan yang tidak dijangka dalam pergerakan bola Java. Semasa proses pengaturcaraan, kita sering menghadapi pelbagai situasi yang tidak dijangka, terutamanya masalah yang melibatkan simulasi fizikal yang lebih kompleks. Artikel ini akan menganalisis untuk anda tingkah laku yang tidak dijangka yang mungkin berlaku semasa refleksi sempadan dalam pergerakan bola Java, membantu anda memahami dan menangani masalah sedemikian dengan lebih baik dan meningkatkan kemahiran pengaturcaraan anda.

Isi soalan

`Soalan:

Saya sedang membangunkan program java di mana saya mensimulasikan pergerakan bola di dalam kotak. Gunakan formula pantulan vektor untuk mengharapkan bola memantul dari sempadan kotak. Walau bagaimanapun, saya menghadapi tingkah laku yang tidak dijangka, bola bukan sahaja keluar dari sempadan, tetapi juga berubah kedudukan secara pelik.

Penerangan masalah:

Saya menggunakan persamaan garis lurus asas (x=x0+at, y=y0+bt, z=z0+ct) untuk mencapai pergerakan bola. Saya mengesyaki masalahnya terletak pada bahagian kod yang bertanggungjawab untuk mengesan perlanggaran dan mengemas kini laluan bola. `

import java.util.Scanner;
import java.lang.Math;

public class test {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Get initial positions for ball 1
        System.out.print("Enter ball 1's initial x-coordinate (x): ");
        double x1 = scanner.nextDouble();
        System.out.print("Enter ball 1's initial y-coordinate (y): ");
        double y1 = scanner.nextDouble();
        System.out.print("Enter ball 1's initial z-coordinate (z): ");
        double z1 = scanner.nextDouble();
        System.out.print("Enter ball 1's radius(r): ");
        double r1 = scanner.nextDouble();

        // Get direction vectorfor ball 1
        System.out.print("Enter direction in x-coordinate (a): ");
        double a = scanner.nextDouble();
        System.out.print("Enter direction in y-coordinate (b): ");
        double b = scanner.nextDouble();
        System.out.print("Enter direction in z-coordinate (c): ");
        double c = scanner.nextDouble();



        double rt = 0;
        double t1 = 0;
        double t2 = 0;
        while(true) {
            double X1 = x1 + a * t1;
            double Y1 = y1 + b * t1;
            double Z1 = z1 + c * t1;

//**collision**

//This is the part that detects the collision and makes a new path for the ball
            
            if (X1-r1 < -25){
                a = -a;
                x1 = -x1;
                System.out.printf("ball hit\n");

            }
            else if (X1+r1 > 25){
                a = -a;
                x1 = -x1;
                System.out.printf("ball hit\n");
                System.out.printf("%f%f%f\n", a, b, c);
            }
            else if (Y1-r1 < -25){
                b = -b;
                y1 = -y1;
                System.out.printf("ball hit\n");
                System.out.printf("%f%f%f\n", a, b, c);
            }
            else if (Y1+r1 > 25){
                b = -b;
                y1 = -y1;
                System.out.printf("ball hit\n");
                System.out.printf("%f%f%f\n", a, b, c);
            }
            else if (Z1-r1 < -25){
                c = -c;
                z1 = -z1;
                System.out.printf("ball hit\n");
                System.out.printf("%f%f%f\n", a, b, c);
            }
            else if (Z1+r1 > 25){
                c = -c;
                z1 = -z1;
                System.out.printf("ball hit\n");
                System.out.printf("%f%f%f\n", a, b, c);
            }
            else{
                System.out.printf("ball in boundary\n");
            }


            System.out.printf("Ball 1 at t=%.2f seconds: (%.2f, %.2f, %.2f)%n", rt, X1, Y1, Z1);

            rt += 1;
            t1 += s1;
            // t2 += s2;
            if (rt>10){
                break;
            }
        }

        // Close the scanner
        scanner.close();
    }


}
Salin selepas log masuk

Tingkah laku yang dijangka:

Saya mahu bola memantul dengan betul dari sempadan dan kekal di dalam kotak.

Tingkah laku yang diperhatikan:

Namun, bola terkeluar dari batas dan tanpa diduga bertukar kedudukan.

Soalan:

Bolehkah anda menyemak bahagian pengesanan perlanggaran dan pantulan kod saya dan cadangkan sebarang pembetulan? Adakah terdapat cara yang lebih cekap untuk mengendalikan pantulan bola di luar sempadan dalam kotak? Maklumat tambahan:

bahasa pengaturcaraan java Kira pergerakan bola menggunakan persamaan asas garis lurus Formula pantulan vektor untuk pengendalian perlanggaran`

Penyelesaian

Saya rasa saya membetulkan kod di sini ialah kod tetap

import java.util.Scanner;
import java.lang.Math;

public class BallExample{

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    // Get initial positions for ball 1
    System.out.print("Enter ball 1's initial x-coordinate (x): ");
    double x1 = scanner.nextDouble();
    System.out.print("Enter ball 1's initial y-coordinate (y): ");
    double y1 = scanner.nextDouble();
    System.out.print("Enter ball 1's initial z-coordinate (z): ");
    double z1 = scanner.nextDouble();
    System.out.print("Enter ball 1's radius(r): ");
    double r1 = scanner.nextDouble();

    // Get direction vectorfor ball 1
    System.out.print("Enter direction in x-coordinate (a): ");
    double a = scanner.nextDouble();
    System.out.print("Enter direction in y-coordinate (b): ");
    double b = scanner.nextDouble();
    System.out.print("Enter direction in z-coordinate (c): ");
    double c = scanner.nextDouble();



    // Get speed
    System.out.print("Enter speed for ball 1(units per second): ");
    double s1 = scanner.nextDouble();





    double rt = 0;
    double t1 = 0;
    while(true) {
        double X1 = x1 + a * t1;
        double Y1 = y1 + b * t1;
        double Z1 = z1 + c * t1;


        System.out.printf("Ball 1 at t=%.2f seconds: (%.2f, %.2f, %.2f)%n", rt, X1, Y1, Z1);

        if (X1+r1>=25||X1-r1<=-25){
            a=-a;
            System.out.printf("HIT\n");
            
        }
        
        
        if (Y1+r1>=25||Y1-r1<=-25){
            b=-b;
            System.out.printf("HIT\n");
            
        }
        
        
        if (Z1+r1>=25||Z1-r1<=-25){
            c=-c;
            System.out.printf("HIT\n");
            
        }

        x1=X1;
        y1=Y1;
        z1=Z1;

        t1 = s1;
        rt += 1;
        if(rt>10){
            break;
        }

    // Close the scanner
    scanner.close();
   }
}}
Salin selepas log masuk

Atas ialah kandungan terperinci Pergerakan bola Java: tingkah laku pantulan sempadan yang tidak dijangka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)