محاسبه مسافت بین دو نقطه در جاوا — از صفر تا صد
در این راهنما به بررسی شیوه محاسبه مسافت بین دو نقطه در جاوا میپردازیم.
فرمول ریاضی محاسبه مسافت
تصور کنید دو نقطه روی یک صفحه وجود دارد: نقطه اول 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}
سخن پایانی
در این راهنما چند روش را برای محاسبه مسافت بین دو نقطه در جاوا بررسی کردیم. همانند همیشه کدهای این مقاله را میتوانید در صفحه گیتهاب (+) ملاحظه کنید.
اگر این نوشته برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای جاوا (Java)
- گنجینه آموزش های جاوا (Java)
- مجموعه آموزشهای برنامهنویسی
- ۱۰ مفهوم اصلی زبان جاوا که هر فرد مبتدی باید بداند
- زبان برنامه نویسی جاوا (Java) — از صفر تا صد
==