Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

คำนวณระยะโฟกัสของกระจกทรงกลมใน Java

ระยะโฟกัสของกระจกทรงกลม (Spherical Mirror Focal Length)

ความสัมพันธ์ระหว่างรัศมีโค้ง (R) และระยะโฟกัส (f):

  • กระจกโค้งใน (Concave Mirror): f = R/2 (บวก - จุดโฟกัสจริง)
  • กระจกโค้งนอก (Convex Mirror): f = -R/2 (ลบ - จุดโฟกัสเสมือน)

ตัวอย่างโค้ด

import java.util.*; 

public class Demo { 
    public static float concaveFocalLength(float radius) { 
        return radius / 2; 
    } 
    
    public static float convexFocalLength(float radius) { 
        return -radius / 2; 
    } 
    
    public static void main(String[] args) { 
        float radius = 55; 
        
        System.out.println("ระยะโฟกัสกระจกโค้งใน (Concave): " + concaveFocalLength(radius) + " หน่วย"); 
        System.out.println("ระยะโฟกัสกระจกโค้งนอก (Convex): " + convexFocalLength(radius) + " หน่วย"); 
    } 
}

ผลลัพธ์

ระยะโฟกัสกระจกโค้งใน (Concave): 27.5 หน่วย
ระยะโฟกัสกระจกโค้งนอก (Convex): -27.5 หน่วย

ทฤษฎีทางฟิสิกส์

กระจกโค้งใน (Concave Mirror)

  • รังสีขนานแกนหลัก → เลียบผ่านจุดโฟกัสจริง (Real focus)
  • f > 0 (Positive)
  • ใช้ใน: กล้องโทรทรรศน์ ไฟฉาย หน้าจอฉายภาพ

กระจกโค้งนอก (Convex Mirror)

  • รังสีขนานแกนหลัก → เลียบกระจายออกเหมือนมาจากจุดโฟกัสเสมือน (Virtual focus)
  • f < 0 (Negative)
  • ใช้ใน: กระจกมองหลังรถยนต์ กระจกมุมถนน

สมการกระจก (Mirror Equation)

1/f = 1/u + 1/v

  • f = ระยะโฟกัส
  • u = ระยะวัตถุ (Object distance) - บวกถ้าวัตถุอยู่หน้ากระจก
  • v = ระยะภาพ (Image distance) - บวก = ภาพจริง, ลบ = ภาพเสมือน

ตัวอย่างเพิ่มเติม: คำนวณระยะภาพ

public class MirrorCalculator { 
    public static double imageDistance(double f, double u) { 
        // 1/v = 1/f - 1/u
        return 1.0 / (1.0/f - 1.0/u); 
    } 
    
    public static String imageNature(double v) { 
        return v > 0 ? "จริง (Real), ไว้ข้างหน้ากระจก" : "เสมือน (Virtual), ไว้ข้างหลังกระจก"; 
    } 
    
    public static void main(String[] args) { 
        double R = 30; // cm
        double f = R / 2; // Concave: 15 cm
        double u = 20; // Object at 20 cm
        
        double v = imageDistance(f, u); 
        System.out.printf("f=%.1f cm, u=%.1f cm -> v=%.1f cm (%s)%n", f, u, v, imageNature(v)); 
    } 
}

Magnification (การขยาย)

m = -v/u = h'/h

  • m < 0 → ภาพกลับหัว
  • |m| > 1 → ขยาย
  • |m| < 1 → ย่อ