מצא את צומת שתי השורות בג'אווה

1. סקירה כללית

במדריך מהיר זה, נראה כיצד למצוא את נקודת החיתוך של שני קווים המוגדרים על ידי הפונקציות הלינאריות בצורת יירוט השיפוע.

2. נוסחת המתמטיקה של הצומת

כל קו ישר (למעט אנכי) במישור יכול להיות מוגדר על ידי הפונקציה הליניארית:

y = mx + b

איפה M הוא המדרון ו ב הוא יירוט ה- y.

לקו אנכי, M יהיה שווה לאינסוף, בגלל זה אנו מוציאים אותו. אם שני קווים מקבילים, יש להם שיפוע זהה, כלומר אותו ערך של M.

נניח שיש לנו שתי שורות. הפונקציה הראשונה מגדירה את השורה הראשונה:

y = m1x + b1

והפונקציה השנייה מגדירה את השורה השנייה:

y = m2x + b2

אנו רוצים למצוא את נקודת החיתוך של קווים אלה. ברור שהמשוואה נכונה לנקודת הצומת:

y1 = y2

בואו נחליף y-משתנים:

m1x + b1 = m2x + b2

מהמשוואה לעיל אנו יכולים למצוא את איקס-לְתַאֵם:

x (m1 - m2) = b2 - b1 x = (b2 - b1) / (m1 - m2)

לבסוף, אנו יכולים למצוא את קואורדינטות y של נקודת החיתוך:

y = m1x + b1

בואו נעבור לחלק היישום.

3. יישום ג'אווה

ראשית, יש לנו ארבעה משתני קלט - m1, b1 עבור השורה הראשונה, ו מ"ר, b2 לשורה השנייה.

שנית, נמיר את נקודת הצומת המחושבת לאובייקט של java.awt.Point סוּג.

לבסוף, קווים עשויים להיות מקבילים, ולכן בואו נכין את הערך המוחזר אופציונאלי:

פומבי אופציונלי calcIntersectionPoint (m1 כפול, b1 כפול, m2 כפול, b2 כפול) {if (m1 == m2) {return Optional.empty (); } x כפול = (b2 - b1) / (m1 - m2); כפול y = m1 * x + b1; נקודת נקודה = נקודה חדשה (); point.setLocation (x, y); החזרה Optional.of (נקודה); }

עכשיו בואו לבחור כמה ערכים ונבדוק את השיטה לקווים מקבילים ולא מקבילים.

לדוגמא, בוא ניקח את ה- איקסציר (y = 0) כשורה הראשונה, והקו המוגדר על ידי y = x - 1 כשורה שנייה.

עבור השורה השנייה, המדרון M שווה ל 1 אשר אומר 45 מעלות, ואת yיירוט שווה ל -1 מה שאומר שהקו מיירט את y-ציר בנקודה (0, -1).

ברור באופן אינטואיטיבי שנקודת החיתוך של הקו השני עם ה- איקסציר חייב להיות (1,0):

בואו נבדוק את זה.

ראשית, בואו נוודא כי א נְקוּדָה קיים, מכיוון שהקווים אינם מקבילים ואז בדקו את הערכים של איקס ו y:

@Test הציבור בטל givenNotParallelLines_whenCalculatePoint_thenPresent () {כפול m1 = 0; כפול b1 = 0; מ"ר כפול = 1; כפול b2 = -1; נקודה אופציונלית = service.calculateIntersectionPoint (m1, b1, m2, b2); assertTrue (point.isPresent ()); assertEquals (point.get (). getX (), 1, 0.001); assertEquals (point.get (). getY (), 0, 0.001); }

לבסוף, ניקח שני קווים מקבילים ונוודא שהערך המוחזר ריק:

@ מבחן חלל ציבורי givenParallelLines_whenCalculatePoint_thenEmpty () {m1 כפול = 1; כפול b1 = 0; מ"ר כפול = 1; כפול b2 = -1; נקודה אופציונלית = service.calculateIntersectionPoint (m1, b1, m2, b2); assertFalse (point.isPresent ()); }

4. מסקנה

במדריך זה הראינו כיצד לחשב את נקודת החיתוך של שתי שורות.

כרגיל, קוד המקור השלם זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found