it

chứng minh đường trung bình song song với cạnh

chứng minh đường trung bình song song với cạnh

การพิสูจน์เส้นตรงขนานกับฐาน — ทฤษฎีเส้นกึ่งกลางสามเหลี่ยม

chứng minh đường trung bình song song với cạnh

ทฤษฎีเส้นกึ่งกลางสามเหลี่ยม (Midsegment Theorem) เป็นทฤษฎีบทสำคัญในเรขาคณิตที่ระบุว่า เส้นที่ลากเชื่อมจุดกึ่งกลางของด้านสองด้านของสามเหลี่ยม จะขนานกับด้านที่สาม (ฐาน) และมีความยาวเท่ากับครึ่งหนึ่งของด้านฐาน บทความนี้อธิบายการพิสูจน์ทั้งแบบ Euclidean geometry และ coordinate geometry พร้อม Python code สำหรับตรวจสอบและ visualize ทฤษฎีบท รวมถึงการประยุกต์ใช้ในงาน computational geometry และ computer graphics

ทฤษฎีเส้นกึ่งกลางสามเหลี่ยม

# midsegment.py — Midsegment Theorem

import json



class MidsegmentTheorem:

    THEOREM = {

        "name": "Midsegment Theorem (ทฤษฎีเส้นกึ่งกลาง)",

        "statement": "ถ้า M เป็นจุดกึ่งกลางของ AB และ N เป็นจุดกึ่งกลางของ AC แล้ว MN // BC และ MN = BC/2",

        "conditions": "M = midpoint(A, B), N = midpoint(A, C)",

        "conclusions": ["MN ขนานกับ BC (MN // BC)", "MN = BC / 2"],

    }



    PROOF_EUCLIDEAN = """

    การพิสูจน์แบบ Euclidean:

    

    กำหนดให้ สามเหลี่ยม ABC

    M = จุดกึ่งกลางของ AB

    N = จุดกึ่งกลางของ AC

    

    พิสูจน์: MN // BC และ MN = BC/2

    

    วิธีที่ 1: ใช้สามเหลี่ยมคล้าย (Similar Triangles)

    

    1. เนื่องจาก AM/AB = AN/AC = 1/2

    2. และมุม A เป็นมุมร่วม (∠MAN = ∠BAC)

    3. ดังนั้น △AMN ~ △ABC (SAS Similarity)

    4. อัตราส่วนคล้าย = 1/2

    5. จาก similarity: ∠AMN = ∠ABC

    6. เนื่องจาก ∠AMN = ∠ABC (corresponding angles)

       และ MN ตัดกับ AB (transversal)

    7. ดังนั้น MN // BC (เส้นตรงสองเส้นทำมุม

       corresponding angles เท่ากัน = ขนาน)

    8. จาก similarity ratio: MN/BC = 1/2

       ดังนั้น MN = BC/2  ∎

    """



    PROOF_COORDINATE = """

    การพิสูจน์แบบ Coordinate Geometry:

    

    กำหนดจุด: A(x1, y1), B(x2, y2), C(x3, y3)

    

    M = midpoint(A, B) = ((x1+x2)/2, (y1+y2)/2)

    N = midpoint(A, C) = ((x1+x3)/2, (y1+y3)/2)

    

    พิสูจน์ MN // BC:

    

    slope(MN) = (yN - yM) / (xN - xM)

             = ((y1+y3)/2 - (y1+y2)/2) / ((x1+x3)/2 - (x1+x2)/2)

             = (y3 - y2) / (x3 - x2)

    

    slope(BC) = (y3 - y2) / (x3 - x2)

    

    slope(MN) = slope(BC)  →  MN // BC  ∎

    

    พิสูจน์ MN = BC/2:

    

    |MN| = sqrt((xN-xM)² + (yN-yM)²)

         = sqrt(((x3-x2)/2)² + ((y3-y2)/2)²)

         = (1/2) × sqrt((x3-x2)² + (y3-y2)²)

         = (1/2) × |BC|  ∎

    """



    def show_theorem(self):

        print("=== Midsegment Theorem ===\n")

        print(f"  {self.THEOREM['statement']}")

        for c in self.THEOREM['conclusions']:

            print(f"  → {c}")



    def show_euclidean(self):

        print(f"\n=== Euclidean Proof ===")

        print(self.PROOF_EUCLIDEAN[:500])



    def show_coordinate(self):

        print(f"\n=== Coordinate Proof ===")

        print(self.PROOF_COORDINATE[:500])



thm = MidsegmentTheorem()

thm.show_theorem()

thm.show_euclidean()

thm.show_coordinate()

Python Verification

# verify.py — Python verification of Midsegment Theorem

import json

import math

import random



class MidsegmentVerification:

    def midpoint(self, p1, p2):

        return ((p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2)

    

    def distance(self, p1, p2):

        return math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2)

    

    def slope(self, p1, p2):

        dx = p2[0] - p1[0]

        if abs(dx) < 1e-10:

            return float('inf')

        return (p2[1] - p1[1]) / dx

    

    def is_parallel(self, p1, p2, p3, p4, tol=1e-9):

        s1 = self.slope(p1, p2)

        s2 = self.slope(p3, p4)

        if s1 == float('inf') and s2 == float('inf'):

            return True

        return abs(s1 - s2) < tol

    

    def verify_theorem(self, A, B, C):

        M = self.midpoint(A, B)

        N = self.midpoint(A, C)

        

        parallel = self.is_parallel(M, N, B, C)

        mn_length = self.distance(M, N)

        bc_length = self.distance(B, C)

        half_check = abs(mn_length - bc_length / 2) < 1e-9

        

        return {

            "A": A, "B": B, "C": C,

            "M (midpoint AB)": M,

            "N (midpoint AC)": N,

            "MN // BC": parallel,

            "MN = BC/2": half_check,

            "|MN|": round(mn_length, 4),

            "|BC|": round(bc_length, 4),

            "|BC|/2": round(bc_length / 2, 4),

        }

    

    def random_test(self, n=5):

        print("=== Random Triangle Verification ===\n")

        for i in range(n):

            A = (random.uniform(-10, 10), random.uniform(-10, 10))

            B = (random.uniform(-10, 10), random.uniform(-10, 10))

            C = (random.uniform(-10, 10), random.uniform(-10, 10))

            

            result = self.verify_theorem(A, B, C)

            status = "PASS" if result["MN // BC"] and result["MN = BC/2"] else "FAIL"

            print(f"  Test {i+1}: [{status}] |MN|={result['|MN|']} = |BC|/2={result['|BC|/2|']}" if '|BC|/2|' in result else f"  Test {i+1}: [{status}] |MN|={result['|MN|']} = |BC|/2={result['|BC|/2']}")

        print(f"\n  All tests should PASS — theorem holds for any triangle")



verify = MidsegmentVerification()

result = verify.verify_theorem((0, 0), (6, 0), (3, 8))

print("=== Specific Example ===")

print(f"  Triangle: A(0,0) B(6,0) C(3,8)")

print(f"  M(midpoint AB) = {result['M (midpoint AB)']}")

print(f"  N(midpoint AC) = {result['N (midpoint AC)']}")

print(f"  MN // BC: {result['MN // BC']}")

print(f"  MN = BC/2: {result['MN = BC/2']}")

print(f"  |MN| = {result['|MN|']}, |BC|/2 = {result['|BC|/2']}")

Visualization

chứng minh đường trung bình song song với cạnh
# visualize.py — Matplotlib visualization

import json



class MidsegmentVisualization:

    CODE = """

# plot_midsegment.py — Visualize Midsegment Theorem

import matplotlib.pyplot as plt

import matplotlib.patches as mpatches

import numpy as np



def plot_midsegment(A, B, C):

    M = ((A[0]+B[0])/2, (A[1]+B[1])/2)

    N = ((A[0]+C[0])/2, (A[1]+C[1])/2)

    

    fig, ax = plt.subplots(1, 1, figsize=(8, 6))

    

    # Draw triangle

    triangle = plt.Polygon([A, B, C], fill=False, edgecolor='blue', linewidth=2)

    ax.add_patch(triangle)

    

    # Draw midsegment MN

    ax.plot([M[0], N[0]], [M[1], N[1]], 'r-', linewidth=2, label='MN (midsegment)')

    

    # Draw base BC

    ax.plot([B[0], C[0]], [B[1], C[1]], 'b-', linewidth=2, label='BC (base)')

    

    # Mark points

    for point, label in [(A, 'A'), (B, 'B'), (C, 'C'), (M, 'M'), (N, 'N')]:

        ax.plot(*point, 'ko', markersize=8)

        ax.annotate(label, point, textcoords="offset points", 

                   xytext=(10, 10), fontsize=14, fontweight='bold')

    

    # Add parallel markers

    ax.annotate('MN // BC', xy=(0.5, 0.95), xycoords='axes fraction',

               fontsize=12, ha='center', color='red')

    

    mn_len = np.sqrt((N[0]-M[0])**2 + (N[1]-M[1])**2)

    bc_len = np.sqrt((C[0]-B[0])**2 + (C[1]-B[1])**2)

    ax.annotate(f'|MN| = {mn_len:.2f} = |BC|/2 = {bc_len/2:.2f}',

               xy=(0.5, 0.9), xycoords='axes fraction', fontsize=11, ha='center')

    

    ax.set_aspect('equal')

    ax.legend()

    ax.set_title('Midsegment Theorem: MN // BC, MN = BC/2')

    ax.grid(True, alpha=0.3)

    plt.tight_layout()

    plt.savefig('midsegment.png', dpi=150)

    plt.show()



plot_midsegment((0, 0), (8, 0), (3, 6))

"""



    def show_code(self):

        print("=== Matplotlib Visualization ===")

        print(self.CODE[:600])



    def ascii_visualization(self):

        print(f"\n=== ASCII Visualization ===")

        print("""

              A

             /\\

            /  \\

           /    \\

       M  /------\\  N     ← MN (midsegment)

         /   //   \\

        /   //     \\

       /   //       \\

      B--------------C     ← BC (base)

      

      MN // BC  (ขนาน)

      |MN| = |BC| / 2

        """)



vis = MidsegmentVisualization()

vis.show_code()

vis.ascii_visualization()

ทฤษฎีบทที่เกี่ยวข้อง

# related.py — Related theorems

import json



class RelatedTheorems:

    THEOREMS = {

        "basic_proportionality": {

            "name": "Basic Proportionality Theorem (Thales)",

            "statement": "ถ้าเส้นตรงขนานกับด้านหนึ่งของสามเหลี่ยม ตัดด้านอีกสองด้าน จะแบ่งด้านทั้งสองในอัตราส่วนเท่ากัน",

            "formula": "DE // BC → AD/DB = AE/EC",

        },

        "converse_bpt": {

            "name": "Converse of BPT",

            "statement": "ถ้าเส้นตรงแบ่งด้านสองด้านของสามเหลี่ยมในอัตราส่วนเท่ากัน แล้วเส้นนั้นขนานกับด้านที่สาม",

            "formula": "AD/DB = AE/EC → DE // BC",

        },

        "similar_triangles": {

            "name": "Similar Triangles (สามเหลี่ยมคล้าย)",

            "statement": "สามเหลี่ยมสองรูปที่มีมุมเท่ากัน 2 คู่ จะคล้ายกัน",

            "criteria": ["AA (Angle-Angle)", "SAS (Side-Angle-Side ratio)", "SSS (Side-Side-Side ratio)"],

        },

        "triangle_inequality": {

            "name": "Triangle Inequality",

            "statement": "ผลบวกของด้านสองด้านใดๆ ของสามเหลี่ยม ต้องมากกว่าด้านที่เหลือ",

            "formula": "a + b > c, b + c > a, a + c > b",

        },

    }



    APPLICATIONS = {

        "cg": {

            "name": "Computational Geometry",

            "use": "Mesh subdivision, Level of Detail (LOD), triangle mesh simplification",

        },

        "cad": {

            "name": "CAD/Engineering",

            "use": "Structural analysis, parallel beam verification, truss design",

        },

        "graphics": {

            "name": "Computer Graphics",

            "use": "Texture mapping, polygon clipping, barycentric coordinates",

        },

        "robotics": {

            "name": "Robotics/Navigation",

            "use": "Path planning, parallel trajectory verification, obstacle avoidance",

        },

    }



    def show_theorems(self):

        print("=== Related Theorems ===\n")

        for key, thm in self.THEOREMS.items():

            print(f"[{thm['name']}]")

            print(f"  {thm['statement']}")

            print()



    def show_applications(self):

        print("=== Applications ===")

        for key, app in self.APPLICATIONS.items():

            print(f"  [{app['name']}] {app['use']}")



related = RelatedTheorems()

related.show_theorems()

related.show_applications()

Computational Geometry Library

# geometry_lib.py — Computational geometry library

import json

import math



class GeometryLib:

    CODE = """

# triangle_lib.py — Triangle geometry library

import math



class Triangle:

    def __init__(self, A, B, C):

        self.A = A

        self.B = B

        self.C = C

    

    def midpoint(self, p1, p2):

        return ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2)

    

    def distance(self, p1, p2):

        return math.sqrt((p2[0]-p1[0])**2 + (p2[1]-p1[1])**2)

    

    def area(self):

        # Shoelace formula

        x1, y1 = self.A

        x2, y2 = self.B

        x3, y3 = self.C

        return abs((x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)) / 2)

    

    def perimeter(self):

        return (self.distance(self.A, self.B) + 

                self.distance(self.B, self.C) + 

                self.distance(self.A, self.C))

    

    def centroid(self):

        return ((self.A[0]+self.B[0]+self.C[0])/3,

                (self.A[1]+self.B[1]+self.C[1])/3)

    

    def midsegments(self):

        M_AB = self.midpoint(self.A, self.B)

        M_BC = self.midpoint(self.B, self.C)

        M_AC = self.midpoint(self.A, self.C)

        return {

            "MN (AB-AC midpoints)": (M_AB, M_AC),  # parallel to BC

            "MP (AB-BC midpoints)": (M_AB, M_BC),  # parallel to AC

            "NP (AC-BC midpoints)": (M_AC, M_BC),  # parallel to AB

        }

    

    def medial_triangle(self):

        M_AB = self.midpoint(self.A, self.B)

        M_BC = self.midpoint(self.B, self.C)

        M_AC = self.midpoint(self.A, self.C)

        return Triangle(M_AB, M_BC, M_AC)



# Usage

t = Triangle((0, 0), (8, 0), (4, 6))

print(f"Area: {t.area()}")

print(f"Perimeter: {t.perimeter():.2f}")

print(f"Centroid: {t.centroid()}")

medial = t.medial_triangle()

print(f"Medial triangle area: {medial.area()} = original/4: {t.area()/4}")

"""



    def show_code(self):

        print("=== Triangle Geometry Library ===")

        print(self.CODE[:600])



    def demo(self):

        print(f"\n=== Demo ===")

        A, B, C = (0, 0), (8, 0), (4, 6)

        area = abs((A[0]*(B[1]-C[1]) + B[0]*(C[1]-A[1]) + C[0]*(A[1]-B[1])) / 2)

        M_AB = ((A[0]+B[0])/2, (A[1]+B[1])/2)

        M_AC = ((A[0]+C[0])/2, (A[1]+C[1])/2)

        mn = math.sqrt((M_AC[0]-M_AB[0])**2 + (M_AC[1]-M_AB[1])**2)

        bc = math.sqrt((C[0]-B[0])**2 + (C[1]-B[1])**2)

        print(f"  Triangle A(0,0) B(8,0) C(4,6)")

        print(f"  Area = {area}")

        print(f"  M(midpoint AB) = {M_AB}")

        print(f"  N(midpoint AC) = {M_AC}")

        print(f"  |MN| = {mn:.4f}")

        print(f"  |BC|/2 = {bc/2:.4f}")

        print(f"  MN = BC/2: {abs(mn - bc/2) < 1e-9}")



lib = GeometryLib()

lib.show_code()

lib.demo()

FAQ - คำถามที่พบบ่อย

Q: ทฤษฎีเส้นกึ่งกลาง (Midsegment Theorem) คืออะไร?

A: เส้นที่ลากเชื่อมจุดกึ่งกลางของด้านสองด้านของสามเหลี่ยม จะขนานกับด้านที่สาม (ฐาน) และมีความยาวเท่ากับครึ่งหนึ่งของฐาน ใช้ได้กับสามเหลี่ยมทุกรูป ไม่ว่าจะเป็นสามเหลี่ยมด้านเท่า ด้านไม่เท่า หรือมุมฉาก

เนื้อหาเกี่ยวข้อง — อ่านต่อ: Kubernetes HPA VPA Cache Strategy Redis

Q: พิสูจน์ได้กี่วิธี?

แนะนำเพิ่มเติม — XM Signal

A: หลายวิธี: 1) สามเหลี่ยมคล้าย (Similar Triangles) — ง่ายที่สุด ใช้ SAS similarity 2) Coordinate Geometry — ใช้สูตร midpoint + slope 3) Vector Proof — ใช้ vector addition 4) Transformation — ใช้ dilation จาก A ด้วย scale 1/2 แต่ละวิธีให้ข้อมูลเชิงลึกต่างกัน

เนื้อหาเกี่ยวข้อง — Elasticsearch Mapping Edge Deployment

Q: Midsegment ใช้ทำอะไรในโปรแกรม?

A: Computational Geometry: mesh subdivision, triangle mesh simplification Computer Graphics: LOD (Level of Detail) — ลด polygon count โดยใช้ midsegments CAD: structural analysis, parallel beam verification Game Development: collision detection optimization, terrain generation Robotics: path planning, trajectory analysis

แนะนำเพิ่มเติม — SiamCafeBook

เนื้อหาเกี่ยวข้อง — แนะนำให้อ่าน load balancer nginx คือ

Q: Medial Triangle คืออะไร?

A: Medial Triangle เกิดจากการเชื่อมจุดกึ่งกลางทั้ง 3 ด้านของสามเหลี่ยม คุณสมบัติ: 1) มี 4 สามเหลี่ยมย่อยที่ congruent กัน 2) พื้นที่ medial triangle = 1/4 ของสามเหลี่ยมเดิม 3) ด้านทุกด้านของ medial triangle ขนานกับด้านของสามเหลี่ยมเดิม

เนื้อหาเกี่ยวข้อง — ดูเพิ่มเติมเรื่อง Htmx Alpine.js Learning Path Roadmap

XM Legend · เทรดเดอร์ & ผู้สอน Forex 13 ปี

ผู้ก่อตั้ง SiamCafe ตั้งแต่ปี 1997 · เทรดเดอร์สาย Forex มากกว่า 13 ปี ได้รับการยกย่องเป็น XM Legend · แบ่งปันความรู้ Forex, ไอที, AI และการเทรด จากประสบการณ์จริงในตลาดจริง