Technology

bài 16: đường trung bình của tam giác

bài 16 đường trung bình của tam giác
bài 16: đường trung bình của tam giác | SiamCafe Blog
2025-12-24· อ. บอม — SiamCafe.net· 8,888 คำ

เส้นกลางของสามเหลี่ยม

เส้นกลาง Midsegment Midline สามเหลี่ยม จุดกึ่งกลาง Midpoint ขนาน ครึ่งหนึ่ง Coordinate Geometry Python คำนวณ

ทฤษฎีสูตรตัวอย่าง
Midpoint((x1+x2)/2, (y1+y2)/2)M(2,3) N(6,7) → (4,5)
Distance√((x2-x1)²+(y2-y1)²)A(0,0) B(3,4) → 5
Midsegment= ½ × ด้านที่สามด้าน=10 → เส้นกลาง=5
Area½|x1(y2-y3)+x2(y3-y1)+x3(y1-y2)|พื้นที่สามเหลี่ยม
Centroid((x1+x2+x3)/3, (y1+y2+y3)/3)จุดศูนย์ถ่วง

Python Geometry Calculator

# geometry.py — Triangle Geometry Calculator
import math
from dataclasses import dataclass
from typing import Tuple, List

@dataclass
class Point:
    x: float
    y: float

    def __repr__(self):
        return f"({self.x}, {self.y})"

def midpoint(p1: Point, p2: Point) -> Point:
    """คำนวณจุดกึ่งกลาง"""
    return Point((p1.x + p2.x) / 2, (p1.y + p2.y) / 2)

def distance(p1: Point, p2: Point) -> float:
    """คำนวณระยะทางระหว่างสองจุด"""
    return math.sqrt((p2.x - p1.x)**2 + (p2.y - p1.y)**2)

def triangle_area(a: Point, b: Point, c: Point) -> float:
    """คำนวณพื้นที่สามเหลี่ยมจากพิกัด"""
    return abs(a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y)) / 2

def centroid(a: Point, b: Point, c: Point) -> Point:
    """คำนวณจุดศูนย์ถ่วง"""
    return Point((a.x + b.x + c.x) / 3, (a.y + b.y + c.y) / 3)

def midsegments(a: Point, b: Point, c: Point) -> List[Tuple[Point, Point, float]]:
    """คำนวณเส้นกลางทั้ง 3 เส้น"""
    m_ab = midpoint(a, b)  # จุดกึ่งกลาง AB
    m_bc = midpoint(b, c)  # จุดกึ่งกลาง BC
    m_ac = midpoint(a, c)  # จุดกึ่งกลาง AC

    segments = [
        (m_ab, m_bc, distance(m_ab, m_bc)),  # ขนาน AC
        (m_bc, m_ac, distance(m_bc, m_ac)),  # ขนาน AB
        (m_ab, m_ac, distance(m_ab, m_ac)),  # ขนาน BC
    ]
    return segments

# ตัวอย่าง
A = Point(0, 0)
B = Point(8, 0)
C = Point(4, 6)

print("=== Triangle Geometry ===")
print(f"  A = {A}")
print(f"  B = {B}")
print(f"  C = {C}")
print(f"\n  Sides:")
print(f"    AB = {distance(A, B):.2f}")
print(f"    BC = {distance(B, C):.2f}")
print(f"    AC = {distance(A, C):.2f}")
print(f"\n  Area = {triangle_area(A, B, C):.2f}")
print(f"  Centroid = {centroid(A, B, C)}")

print(f"\n  Midsegments:")
segs = midsegments(A, B, C)
sides = [("AC", distance(A, C)), ("AB", distance(A, B)), ("BC", distance(B, C))]
for i, (p1, p2, length) in enumerate(segs):
    side_name, side_len = sides[i]
    print(f"    {p1} → {p2} | Length = {length:.2f} "
          f"(½ of {side_name} = {side_len/2:.2f})")

Advanced Geometry

# advanced_geometry.py — Advanced Calculations
from dataclasses import dataclass
import math

@dataclass
class Triangle:
    a: Point
    b: Point
    c: Point

    @property
    def sides(self):
        return (
            distance(self.a, self.b),
            distance(self.b, self.c),
            distance(self.a, self.c),
        )

    @property
    def perimeter(self) -> float:
        return sum(self.sides)

    @property
    def area(self) -> float:
        return triangle_area(self.a, self.b, self.c)

    @property
    def area_heron(self) -> float:
        """Heron's formula"""
        a, b, c = self.sides
        s = (a + b + c) / 2
        return math.sqrt(s * (s - a) * (s - b) * (s - c))

    @property
    def incircle_radius(self) -> float:
        """รัศมีวงกลมแนบใน"""
        return self.area / (self.perimeter / 2)

    @property
    def circumcircle_radius(self) -> float:
        """รัศมีวงกลมล้อมรอบ"""
        a, b, c = self.sides
        return (a * b * c) / (4 * self.area)

    @property
    def angles_deg(self):
        """คำนวณมุมทั้ง 3 มุม (องศา)"""
        a, b, c = self.sides
        A = math.degrees(math.acos((b**2 + c**2 - a**2) / (2 * b * c)))
        B = math.degrees(math.acos((a**2 + c**2 - b**2) / (2 * a * c)))
        C = 180 - A - B
        return (round(A, 2), round(B, 2), round(C, 2))

    @property
    def triangle_type(self) -> str:
        angles = self.angles_deg
        if any(a == 90 for a in angles):
            return "Right Triangle (สามเหลี่ยมมุมฉาก)"
        elif any(a > 90 for a in angles):
            return "Obtuse Triangle (สามเหลี่ยมมุมป้าน)"
        return "Acute Triangle (สามเหลี่ยมมุมแหลม)"

tri = Triangle(Point(0, 0), Point(8, 0), Point(4, 6))

print("=== Triangle Properties ===")
a, b, c = tri.sides
print(f"  Sides: {a:.2f}, {b:.2f}, {c:.2f}")
print(f"  Perimeter: {tri.perimeter:.2f}")
print(f"  Area: {tri.area:.2f}")
print(f"  Area (Heron): {tri.area_heron:.2f}")
print(f"  Angles: {tri.angles_deg}")
print(f"  Type: {tri.triangle_type}")
print(f"  Incircle r: {tri.incircle_radius:.2f}")
print(f"  Circumcircle R: {tri.circumcircle_radius:.2f}")

# Application in IT
applications = {
    "Computer Graphics": "Transform, Rotation, Projection ใช้ Matrix + Vector",
    "Game Development": "Collision Detection ตรวจจุดอยู่ในสามเหลี่ยม",
    "GIS/Mapping": "คำนวณพื้นที่ ระยะทาง Haversine Formula",
    "Machine Learning": "Distance Metrics: Euclidean, Manhattan, Cosine",
    "CAD/CAM": "ออกแบบชิ้นส่วน Mesh Generation Tessellation",
    "Robotics": "Path Planning, Obstacle Avoidance, SLAM",
}

print(f"\n\nGeometry in IT:")
for field, desc in applications.items():
    print(f"  [{field}]: {desc}")

Visualization

# visualization.py — Triangle Visualization
# import matplotlib.pyplot as plt
# import numpy as np
#
# def plot_triangle(A, B, C):
#     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 midsegments
#     M_AB = ((A[0]+B[0])/2, (A[1]+B[1])/2)
#     M_BC = ((B[0]+C[0])/2, (B[1]+C[1])/2)
#     M_AC = ((A[0]+C[0])/2, (A[1]+C[1])/2)
#
#     for p1, p2 in [(M_AB, M_BC), (M_BC, M_AC), (M_AB, M_AC)]:
#         ax.plot([p1[0], p2[0]], [p1[1], p2[1]], 'r--', linewidth=1.5)
#
#     # Label vertices
#     for point, label in [(A, 'A'), (B, 'B'), (C, 'C')]:
#         ax.annotate(label, point, fontsize=14, ha='center', va='bottom')
#
#     # Label midpoints
#     for point, label in [(M_AB, 'M_AB'), (M_BC, 'M_BC'), (M_AC, 'M_AC')]:
#         ax.plot(*point, 'ro', markersize=6)
#         ax.annotate(label, point, fontsize=10, color='red')
#
#     ax.set_aspect('equal')
#     ax.grid(True, alpha=0.3)
#     ax.set_title('Triangle with Midsegments')
#     plt.savefig('triangle_midsegments.png', dpi=150)
#     plt.show()
#
# plot_triangle((0, 0), (8, 0), (4, 6))

# Distance Formulas for IT
formulas = {
    "Euclidean": {
        "formula": "√(Σ(xi-yi)²)",
        "use": "Straight-line distance, Default metric",
        "python": "np.linalg.norm(a - b)",
    },
    "Manhattan": {
        "formula": "Σ|xi-yi|",
        "use": "Grid-based distance, City blocks",
        "python": "np.sum(np.abs(a - b))",
    },
    "Cosine": {
        "formula": "1 - (a·b)/(|a||b|)",
        "use": "Text similarity, Embeddings",
        "python": "1 - np.dot(a, b)/(np.linalg.norm(a)*np.linalg.norm(b))",
    },
    "Haversine": {
        "formula": "2r·arcsin(√(sin²(Δφ/2)+cos(φ1)cos(φ2)sin²(Δλ/2)))",
        "use": "GPS distance on Earth surface",
        "python": "haversine(lat1, lon1, lat2, lon2)",
    },
}

print("Distance Formulas:")
for name, info in formulas.items():
    print(f"\n  [{name}]")
    for k, v in info.items():
        print(f"    {k}: {v}")

เคล็ดลับ

เส้นกลางของสามเหลี่ยมคืออะไร

Midsegment เชื่อมจุดกึ่งกลางสองด้าน ขนานด้านที่สาม ยาวครึ่งหนึ่ง 3 เส้น แบ่ง 4 สามเหลี่ยมเท่ากัน

จุดกึ่งกลาง (Midpoint) หาอย่างไร

((x1+x2)/2, (y1+y2)/2) เฉลี่ยค่า x y Coordinate Geometry Computer Graphics GIS Game Development

Python ใช้คำนวณเรขาคณิตอย่างไร

math module numpy Vector matplotlib Visualization shapely Geometric Objects sympy Symbolic ระยะทาง พื้นที่ มุม

เรขาคณิตใช้ในงาน IT อย่างไร

Computer Graphics Transform Game Collision Detection GIS ระยะทาง ML Distance Metrics CAD ออกแบบ Robotics Path Planning

สรุป

เส้นกลางสามเหลี่ยม Midsegment Midpoint Distance Area Centroid Heron Formula Python math numpy matplotlib Coordinate Geometry Computer Graphics Game Development GIS Machine Learning

📖 บทความที่เกี่ยวข้อง

bài tập đường trung bình của tam giácอ่านบทความ → bài 2 đường trung bình của tam giácอ่านบทความ → đường trung bình của tam giác lớp 7อ่านบทความ → bài tập về đường trung bình của tam giácอ่านบทความ → bài tập đường trung bình của tam giác lớp 8อ่านบทความ →

📚 ดูบทความทั้งหมด →