محاسبه مسافت بین دو نقطه در جاوا — از صفر تا صد

۴۳۹ بازدید
آخرین به‌روزرسانی: ۶ شهریور ۱۴۰۲
زمان مطالعه: ۲ دقیقه
محاسبه مسافت بین دو نقطه در جاوا — از صفر تا صد

در این راهنما به بررسی شیوه محاسبه مسافت بین دو نقطه در جاوا می‌پردازیم.

997696

فرمول ریاضی محاسبه مسافت

تصور کنید دو نقطه روی یک صفحه وجود دارد: نقطه اول A دارای مختصات (x1, y1) است و نقطه دوم B مختصات (x2, y2) را دارد و می‌خواهیم AB یعنی مسافت بین دو نقطه را محاسبه کنیم.

ابتدا یک مثلث قائم‌الزاویه با وتر AB می‌سازیم:

مسافت بین دو نقطه در جاوا

بر اساس قضیه فیثاغورث، مجموع مجذورهای طول اضلاع غیر وتر مثلث برابر با مربع طول وتر مثلث است یعنی:

AB2 = AC2 + CB2

در وهله دوم به محاسبه AC و CB می‌پردازیم. بدیهی است که:

AC = y2 - y1

به طور مشابه:

BC = x2 - x1

بخش‌هایی از معادله را جایگزین می‌کنیم:

distance * distance = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1)

در نهایت از معادله فوق می‌توانیم مسافت بین دو نقطه را محاسبه کنیم:

distance = sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1))

پیاده‌سازی جاوا

اینک به بررسی پیاده‌سازی جاوای این محاسبه می‌پردازیم.

استفاده از فرمول ساده

با این که پکیج‌های java.lang.Math و java.awt.geom.Point2D راه‌حل‌های آماده‌ای ارائه می‌کنند. اما ابتدا فرمول‌های فوق را به صورت زیر پیاده‌سازی می‌کنیم:

1public double calculateDistanceBetweenPoints(
2  double x1, 
3  double y1, 
4  double x2, 
5  double y2) {       
6    return Math.sqrt((y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1));
7}

برای تست این راه‌حل باید مثلثی با اضلاع 3 و 4 (که در تصویر فوق نمایش یافته است) بسازیم. بدیهی است که اندازه قطر نیز 5 خواهد بود، زیرا:

3 * 3 + 4 * 4 = 5 * 5

راه‌حل را بررسی می‌کنیم:

1@Test
2public void givenTwoPoints_whenCalculateDistanceByFormula_thenCorrect() {
3    double x1 = 3;
4    double y1 = 4;
5    double x2 = 7;
6    double y2 = 1;
7 
8    double distance = service.calculateDistanceBetweenPoints(x1, y1, x2, y2);
9 
10    assertEquals(distance, 5, 0.001);
11}

استفاده از پکیج java.lang.Math

اگر نتیجه ضرب متد ()calculateDistanceBetweenPoints بسیار بزرگ باشد، ممکن است سرریز رخ دهد. برخلاف آن متد ()Math.hypot از overflow یا underflow بی‌درنگ جلوگیری می‌کند.

1public double calculateDistanceBetweenPointsWithHypot(
2    double x1, 
3    double y1, 
4    double x2, 
5    double y2) {
6         
7    double ac = Math.abs(y2 - y1);
8    double cb = Math.abs(x2 - x1);
9         
10    return Math.hypot(ac, cb);
11}

همین نقاط را مانند قبل می‌گیریم و بررسی می‌کنیم که مسافت همان باشد:

1@Test
2public void givenTwoPoints_whenCalculateDistanceWithHypot_thenCorrect() {
3    double x1 = 3;
4    double y1 = 4;
5    double x2 = 7;
6    double y2 = 1;
7 
8    double distance = service.calculateDistanceBetweenPointsWithHypot(x1, y1, x2, y2);
9 
10    assertEquals(distance, 5, 0.001);
11}

استفاده از پکیج java.awt.geom.Point2D

در نهایت مسافت را با استفاده از متد ()Point2D.distance محاسبه می‌کنیم:

1public double calculateDistanceBetweenPointsWithPoint2D( 
2    double x1, 
3    double y1, 
4    double x2, 
5    double y2) {
6         
7    return Point2D.distance(x1, y1, x2, y2);
8}

اینک متد را به همان روش تست می‌کنیم:

1@Test
2public void givenTwoPoints_whenCalculateDistanceWithPoint2D_thenCorrect() {
3 
4    double x1 = 3;
5    double y1 = 4;
6    double x2 = 7;
7    double y2 = 1;
8 
9    double distance = service.calculateDistanceBetweenPointsWithPoint2D(x1, y1, x2, y2);
10 
11    assertEquals(distance, 5, 0.001);
12}

سخن پایانی

در این راهنما چند روش را برای محاسبه مسافت بین دو نقطه در جاوا بررسی کردیم. همانند همیشه کدهای این مقاله را می‌توانید در صفحه گیت‌هاب (+) ملاحظه کنید.

اگر این نوشته برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
baeldung
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *