יסודות משולש

נוסחה, קוד, ויזואליזציה: שלוש דרכים להבין את אותו מושג

קווים מיוחדים — שלושה ייצוגים של אותו רעיון

ויזואלי — "אני רואה את זה"
a (BC) b (AC) c (AB) median altitude bisector A B C
נוסחאות — "אני מבין את היחס"
תיכון
ma = ½√(2b²+2c²−a²)
גובה
ha = 2·Area / a
חוצה זווית
ta = 2bc·cos(A/2)/(b+c)
שטח (הרון)
A = √(s(s−a)(s−b)(s−c))
קוד מפורק — "אני עוקב אחרי השלבים"
# Median from A to midpoint of BC
m_a = 0.5 * sqrt(
    2*b**2 + 2*c**2 - a**2
)

# Altitude from A to BC
h_a = 2 * area / a

# Angle bisector from A
half = radians(angle_A / 2)
t_a = 2*b*c*cos(half)/(b+c)
כל שורה = פעולה אחת בלבד
בשפה פשוטה (ללא קוד)
1. תיכון: מצאו את אמצע הצלע הנגדית, ושרטטו קו מהקודקוד לנקודה הזו. שלושת התיכונים נפגשים בנקודה אחת.
2. גובה: הורידו אנך מהקודקוד אל הצלע הנגדית (או הרחבתה). אורך הגובה = 2 × שטח / צלע.
3. חוצה זווית: מחלק את הזווית בקודקוד לשני חלקים שווים. רגלו מחלקת את הצלע הנגדית ביחס הצלעות הצמודות.

שימו לב: הצבעים עקביים — תיכון בירוק-אמרלד בציור, בנוסחה ובקוד. גובה בכתום בכולם. חוצה זווית בסגול בכולם. המיפוי הזה הוא מנגנון הלמידה — לא כל ייצוג בנפרד, אלא החיבורים ביניהם.

מיפוי בין ייצוגים

כל שורה היא אותו דבר בשלוש צורות שונות:

Element Math Formula Python Method Visual Color
Side a |BC| get_sides()['a'] Bottom edge
Side b |AC| get_sides()['b'] Left edge
Side c |AB| get_sides()['c'] Right edge
Median ma = ½√(2b²+2c²−a²) median_to_a() Emerald dashed line
Altitude ha = 2A/a altitude_from_a() Orange dashed line + right angle
Bisector ta = 2bc·cos(A/2)/(b+c) bisector_from_a() Violet dashed line
Perp. Bisector midpoint + normal circumcenter() Rose dashed line
Centroid G ((xA+xB+xC)/3, ...) centroid() Amber star marker

מחשבון אינטראקטיבי

הזינו קואורדינטות של שלושת הקודקודים, בחרו אלמנט, וצפו בויזואליזציה ובחישוב שלב-אחרי-שלב:

x , y
x , y
x , y
ויזואלי
חישוב שלב אחרי שלב

קווים מיוחדים — מבט מעמיק

תיכון (Median)

קו מקודקוד לאמצע הצלע הנגדית. שלושת התיכונים נפגשים ב-מרכז כובד G, שמחלק כל תיכון ביחס 2:1 מהקודקוד.

# median length formula m_a = 0.5 * sqrt(2*b**2 + 2*c**2 - a**2) # foot = midpoint of BC foot = ((Bx+Cx)/2, (By+Cy)/2)
G A B C

גובה (Altitude)

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

# altitude length h_a = 2 * area / a # foot = projection of A onto BC t = dot(AP, BC) / dot(BC, BC) foot = B + t * (C - B)
H A B C

חוצה זווית (Angle Bisector)

מחלק את הזווית בקודקוד לשני חלקים שווים. שלושת חוצי הזווית נפגשים ב-מרכז המעגל החסום I. לפי משפט חוצה הזווית: BD/DC = AB/AC.

# bisector length half_A = radians(angle_A / 2) t_a = 2*b*c*cos(half_A)/(b+c) # foot divides BC in ratio c:b ratio = c / (b + c)
I A B C

אנך אמצעי (Perpendicular Bisector)

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

# circumcenter (perp. bisector meet) D = 2*(ax*(by-cy)+bx*(cy-ay)+cx*(ay-by)) Ox = (a2*(by-cy)+b2*(cy-ay)+c2*(ay-by))/D Oy = (a2*(cx-bx)+b2*(ax-cx)+c2*(bx-ax))/D # circumradius R = (a*b*c) / (4 * area)
O A B C

ארבע הנקודות המיוחדות

G

מרכז כובד (Centroid)

חיתוך התיכונים

G = ((xA+xB+xC)/3, (yA+yB+yC)/3)

תמיד בתוך המשולש. ממוצע הקואורדינטות. מחלק כל תיכון ביחס 2:1.

H

אורתוצנטר (Orthocenter)

חיתוך הגבהים

# Solve 2 altitude line equations d1·(x-ax) + d1·(y-ay) = 0 d2·(x-bx) + d2·(y-by) = 0

יכול להיות מחוץ למשולש (כשהמשולש קהה-זווית). בישר-זווית, H נמצא על הקודקוד.

I

מרכז מעגל חסום (Incenter)

חיתוך חוצי הזווית

I = (a·xA+b·xB+c·xC) / (a+b+c) r = Area / s (s = semi-perimeter)

תמיד בתוך המשולש. מרחק שווה מכל שלוש הצלעות. r = רדיוס המעגל החסום.

O

מרכז מעגל חוסם (Circumcenter)

חיתוך האנכים האמצעיים

R = (a*b*c) / (4 * Area) # Equidistant from all 3 vertices

יכול להיות מחוץ למשולש (קהה-זווית). בישר-זווית, O נמצא על אמצע היתר. מרחק שווה מכל שלושת הקודקודים.

תובנה: בכל משולש (שאינו שווה-צלעות), שלוש נקודות — G, H ו-O — נמצאות על קו ישר אחד, הנקרא קו אוילר. מרכז הכובד G מחלק את HO ביחס 1:2.

קוד Python מלא

הקוד המלא נמצא בקובץ triangle_elements_calculator.py — הוא כולל חישוב מקואורדינטות, ויזואליזציה עם matplotlib, ותפריט אינטראקטיבי עם 12 אפשרויות.

class TriangleElementsCalculator:
    """Calculate special lines and centers of a triangle."""

    def set_from_vertices(self, A, B, C):
        self.A, self.B, self.C = A, B, C

    def set_from_sides(self, a, b, c):
        # Place A at origin, B on x-axis, solve C
        cos_A = (b**2 + c**2 - a**2) / (2*b*c)
        sin_A = sqrt(1 - cos_A**2)
        self.A = (0, 0)
        self.B = (c, 0)
        self.C = (b*cos_A, b*sin_A)

    # ── Special Lines ───────────────────────
    def median_to_a(self):
        length = 0.5 * sqrt(2*b**2 + 2*c**2 - a**2)
        foot = midpoint(B, C)
        return {'length': length, 'foot': foot}

    def altitude_from_a(self):
        length = 2 * area / a
        foot = project(A, B, C)  # perpendicular projection
        return {'length': length, 'foot': foot}

    def bisector_from_a(self):
        half_A = radians(angle_A / 2)
        length = (2*b*c*cos(half_A)) / (b+c)
        ratio = c / (b + c)  # bisector theorem
        return {'length': length, 'foot': foot}

    # ── Four Centers ────────────────────────
    def centroid(self):
        return ((xA+xB+xC)/3, (yA+yB+yC)/3)

    def orthocenter(self):  # 2 altitude eqns
    def incenter(self):     # weighted average
    def circumcenter(self): # perp bisector eqns

    def inradius(self):   return area / semi
    def circumradius(self): return a*b*c/(4*area)

# Run: python triangle_elements_calculator.py

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