Bài Tập Đường Trung Bình — แบบฝึกหัดเส้นกึ่งกลางสามเหลี่ยม
Đường trung bình (เส้นกึ่งกลาง หรือ Midsegment) ของสามเหลี่ยมคือส่วนของเส้นตรงที่เชื่อมจุดกึ่งกลางของด้านสองด้าน คุณสมบัติสำคัญคือ เส้นกึ่งกลางขนานกับด้านที่สามและมีความยาวเท่ากับครึ่งหนึ่งของด้านนั้น ทฤษฎีนี้เป็นพื้นฐานสำคัญในเรขาคณิตที่ใช้ในการแก้โจทย์หลากหลาย บทความนี้รวบรวมแบบฝึกหัดพร้อมเฉลยและ Python tools สำหรับคำนวณและพิสูจน์
ทฤษฎีเส้นกึ่งกลาง (Midsegment Theorem)
# midsegment_theory.py — Midsegment theorem
import json
import math
class MidsegmentTheorem:
THEOREM = {
"statement": "เส้นกึ่งกลางของสามเหลี่ยม = ขนานกับด้านที่สาม และยาวเท่ากับครึ่งหนึ่งของด้านนั้น",
"formal": "ถ้า M เป็นจุดกึ่งกลางของ AB และ N เป็นจุดกึ่งกลางของ AC → MN // BC และ MN = BC/2",
"corollaries": [
"สามเหลี่ยมมีเส้นกึ่งกลาง 3 เส้น (ต่อด้านละ 1)",
"เส้นกึ่งกลาง 3 เส้น แบ่งสามเหลี่ยมออกเป็น 4 สามเหลี่ยมเท่ากัน",
"สามเหลี่ยมที่เกิดจากเส้นกึ่งกลาง คล้ายกับสามเหลี่ยมเดิม (อัตราส่วน 1:2)",
],
}
PROPERTIES = {
"parallel": "MN // BC (ขนานกับด้านที่สาม)",
"half_length": "MN = BC / 2 (ยาวครึ่งหนึ่ง)",
"area": "พื้นที่สามเหลี่ยม MN = 1/4 ของสามเหลี่ยมเดิม",
"perimeter": "เส้นรอบรูปสามเหลี่ยมเส้นกึ่งกลาง = 1/2 ของสามเหลี่ยมเดิม",
}
def show_theorem(self):
print("=== Midsegment Theorem ===\n")
print(f" {self.THEOREM['statement']}")
print(f"\n Formal: {self.THEOREM['formal']}")
print(f"\n Corollaries:")
for c in self.THEOREM['corollaries']:
print(f" • {c}")
def show_properties(self):
print(f"\n=== Properties ===")
for key, prop in self.PROPERTIES.items():
print(f" [{key}] {prop}")
theorem = MidsegmentTheorem()
theorem.show_theorem()
theorem.show_properties()
แบบฝึกหัดพื้นฐาน
# basic_exercises.py — Basic midsegment exercises
import json
import math
class BasicExercises:
EXERCISES = {
"ex1": {
"question": "สามเหลี่ยม ABC มี BC = 12 cm, M เป็นจุดกึ่งกลาง AB, N เป็นจุดกึ่งกลาง AC จงหาความยาว MN",
"solution": "MN = BC / 2 = 12 / 2 = 6 cm",
"answer": 6,
},
"ex2": {
"question": "สามเหลี่ยม PQR มีเส้นกึ่งกลาง DE = 8 cm (ขนานกับ QR) จงหาความยาว QR",
"solution": "DE = QR / 2 → QR = DE × 2 = 8 × 2 = 16 cm",
"answer": 16,
},
"ex3": {
"question": "สามเหลี่ยม ABC มี AB = 10, BC = 14, CA = 12 จงหาเส้นรอบรูปของสามเหลี่ยมเส้นกึ่งกลาง",
"solution": "เส้นกึ่งกลาง = ครึ่งหนึ่งของด้านตรงข้าม → เส้นรอบรูป = (10+14+12)/2 = 18",
"answer": 18,
},
"ex4": {
"question": "สามเหลี่ยม ABC มีพื้นที่ 48 ตร. ซม. จงหาพื้นที่สามเหลี่ยมที่เกิดจากเส้นกึ่งกลาง 3 เส้น",
"solution": "พื้นที่สามเหลี่ยมเส้นกึ่งกลาง = 1/4 ของสามเหลี่ยมเดิม = 48/4 = 12 ตร. ซม.",
"answer": 12,
},
"ex5": {
"question": "สามเหลี่ยม XYZ มี XY = 6, YZ = 10, XZ = 8 จงหาความยาวเส้นกึ่งกลางทั้ง 3 เส้น",
"solution": "m1 (ขนาน YZ) = 10/2 = 5, m2 (ขนาน XZ) = 8/2 = 4, m3 (ขนาน XY) = 6/2 = 3",
"answer": [5, 4, 3],
},
}
def show_exercises(self):
print("=== แบบฝึกหัดพื้นฐาน ===\n")
for key, ex in self.EXERCISES.items():
print(f"[{key}] {ex['question']}")
print(f" Solution: {ex['solution']}")
print(f" Answer: {ex['answer']}")
print()
exercises = BasicExercises()
exercises.show_exercises()
แบบฝึกหัดประยุกต์
# advanced_exercises.py — Advanced midsegment exercises
import json
import math
class AdvancedExercises:
EXERCISES = {
"ex6": {
"question": "สามเหลี่ยม ABC มี A(0,0), B(8,0), C(4,6) จงหาพิกัดจุดกึ่งกลางและความยาวเส้นกึ่งกลางที่ขนาน BC",
"solution": """
M = จุดกึ่งกลาง AB = ((0+8)/2, (0+0)/2) = (4, 0)
N = จุดกึ่งกลาง AC = ((0+4)/2, (0+6)/2) = (2, 3)
MN = sqrt((4-2)² + (0-3)²) = sqrt(4+9) = sqrt(13) ≈ 3.61
BC = sqrt((8-4)² + (0-6)²) = sqrt(16+36) = sqrt(52) ≈ 7.21
MN = BC/2 ✓ (sqrt(13) = sqrt(52)/2)""",
"answer": "MN = √13 ≈ 3.61",
},
"ex7": {
"question": "พิสูจน์ว่าเส้นกึ่งกลาง 3 เส้นแบ่งสามเหลี่ยมออกเป็น 4 สามเหลี่ยมที่มีพื้นที่เท่ากัน",
"solution": """
สมมติสามเหลี่ยม ABC มีพื้นที่ S
เส้นกึ่งกลาง D(กึ่งกลาง AB), E(กึ่งกลาง BC), F(กึ่งกลาง AC)
สามเหลี่ยม ADF: ด้าน AD = AB/2, AF = AC/2, มุม A เท่ากัน
→ พื้นที่ ADF = (1/2)(AB/2)(AC/2)sin(A) = S/4
เช่นเดียวกัน: BDE = S/4, CEF = S/4, DEF = S/4
รวม 4 สามเหลี่ยม = S ✓""",
"answer": "แต่ละสามเหลี่ยม = S/4",
},
"ex8": {
"question": "สี่เหลี่ยม ABCD มีจุดกึ่งกลาง E, F, G, H ของด้าน AB, BC, CD, DA ตามลำดับ พิสูจน์ว่า EFGH เป็นสี่เหลี่ยมด้านขนาน",
"solution": """
ใช้ทฤษฎีเส้นกึ่งกลางกับเส้นทแยงมุม:
สามเหลี่ยม ABD: EH เป็นเส้นกึ่งกลาง → EH // BD, EH = BD/2
สามเหลี่ยม BCD: FG เป็นเส้นกึ่งกลาง → FG // BD, FG = BD/2
ดังนั้น EH // FG และ EH = FG → EFGH เป็นสี่เหลี่ยมด้านขนาน ✓
(ทฤษฎี Varignon's Theorem)""",
"answer": "EFGH เป็นสี่เหลี่ยมด้านขนาน (Varignon)",
},
}
def show_exercises(self):
print("=== แบบฝึกหัดประยุกต์ ===\n")
for key, ex in self.EXERCISES.items():
print(f"[{key}] {ex['question']}")
print(f" Answer: {ex['answer']}")
print()
adv = AdvancedExercises()
adv.show_exercises()
Python Solver
# solver.py — Python midsegment solver
import json
import math
class MidsegmentSolver:
CODE = """
# midsegment_solver.py — Solve midsegment problems
import math
from typing import Tuple
Point = Tuple[float, float]
class MidsegmentSolver:
@staticmethod
def midpoint(p1: Point, p2: Point) -> Point:
'''Calculate midpoint'''
return ((p1[0]+p2[0])/2, (p1[1]+p2[1])/2)
@staticmethod
def distance(p1: Point, p2: Point) -> float:
'''Calculate distance'''
return math.sqrt((p2[0]-p1[0])**2 + (p2[1]-p1[1])**2)
@staticmethod
def midsegment_length(side_length: float) -> float:
'''Midsegment = half of parallel side'''
return side_length / 2
@staticmethod
def side_from_midsegment(midsegment_length: float) -> float:
'''Find side from midsegment'''
return midsegment_length * 2
def all_midsegments(self, a: float, b: float, c: float):
'''Calculate all 3 midsegments from sides a, b, c'''
return {
'parallel_to_a': a / 2,
'parallel_to_b': b / 2,
'parallel_to_c': c / 2,
'midsegment_perimeter': (a + b + c) / 2,
}
def midsegment_triangle_area(self, original_area: float) -> float:
'''Area of midsegment triangle = 1/4 of original'''
return original_area / 4
def solve_coordinate(self, A: Point, B: Point, C: Point):
'''Solve midsegment problem with coordinates'''
# Midpoints
M_ab = self.midpoint(A, B)
M_bc = self.midpoint(B, C)
M_ac = self.midpoint(A, C)
# Sides
AB = self.distance(A, B)
BC = self.distance(B, C)
AC = self.distance(A, C)
# Midsegments
ms1 = self.distance(M_ab, M_ac) # parallel to BC
ms2 = self.distance(M_ab, M_bc) # parallel to AC
ms3 = self.distance(M_ac, M_bc) # parallel to AB
# Verify theorem
return {
'vertices': {'A': A, 'B': B, 'C': C},
'midpoints': {'M_AB': M_ab, 'M_BC': M_bc, 'M_AC': M_ac},
'sides': {'AB': round(AB, 4), 'BC': round(BC, 4), 'AC': round(AC, 4)},
'midsegments': {
'parallel_BC': round(ms1, 4),
'parallel_AC': round(ms2, 4),
'parallel_AB': round(ms3, 4),
},
'verification': {
'ms1 = BC/2': round(ms1, 4) == round(BC/2, 4),
'ms2 = AC/2': round(ms2, 4) == round(AC/2, 4),
'ms3 = AB/2': round(ms3, 4) == round(AB/2, 4),
},
}
def is_parallel(self, p1: Point, p2: Point, p3: Point, p4: Point) -> bool:
'''Check if line p1p2 is parallel to line p3p4'''
dx1 = p2[0] - p1[0]
dy1 = p2[1] - p1[1]
dx2 = p4[0] - p3[0]
dy2 = p4[1] - p3[1]
cross = dx1 * dy2 - dy1 * dx2
return abs(cross) < 1e-10
# solver = MidsegmentSolver()
# result = solver.solve_coordinate((0,0), (8,0), (4,6))
# print(result)
"""
def show_code(self):
print("=== Midsegment Solver ===")
print(self.CODE[:600])
def demo(self):
print(f"\n=== Demo: Triangle (0,0), (8,0), (4,6) ===")
A, B, C = (0,0), (8,0), (4,6)
M_ab = ((A[0]+B[0])/2, (A[1]+B[1])/2)
M_ac = ((A[0]+C[0])/2, (A[1]+C[1])/2)
BC = math.sqrt((B[0]-C[0])**2 + (B[1]-C[1])**2)
ms = math.sqrt((M_ab[0]-M_ac[0])**2 + (M_ab[1]-M_ac[1])**2)
print(f" M_AB = {M_ab}, M_AC = {M_ac}")
print(f" BC = {BC:.4f}")
print(f" Midsegment = {ms:.4f}")
print(f" BC/2 = {BC/2:.4f}")
print(f" Verified: {abs(ms - BC/2) < 0.001}")
solver = MidsegmentSolver()
solver.show_code()
solver.demo()
แบบฝึกหัดเพิ่มเติม
# more_exercises.py — More practice problems
import json
class MoreExercises:
PRACTICE = {
"p1": {
"level": "ง่าย",
"question": "สามเหลี่ยมมีด้าน 6, 8, 10 จงหาเส้นรอบรูปสามเหลี่ยมเส้นกึ่งกลาง",
"answer": "(6+8+10)/2 = 12",
},
"p2": {
"level": "ง่าย",
"question": "เส้นกึ่งกลาง MN ขนานกับ BC ยาว 7 cm จงหา BC",
"answer": "BC = 7 × 2 = 14 cm",
},
"p3": {
"level": "ปานกลาง",
"question": "สามเหลี่ยม ABC มีพื้นที่ 100 ตร. ซม. จงหาพื้นที่สามเหลี่ยม 4 รูปที่เกิดจากเส้นกึ่งกลาง",
"answer": "แต่ละรูป = 100/4 = 25 ตร. ซม.",
},
"p4": {
"level": "ปานกลาง",
"question": "สามเหลี่ยม A(2,1), B(10,1), C(6,9) จงหาความยาวเส้นกึ่งกลางที่ขนาน AB",
"answer": "AB = 8, เส้นกึ่งกลาง = 8/2 = 4",
},
"p5": {
"level": "ยาก",
"question": "สามเหลี่ยมหน้าจั่ว AB = AC = 13, BC = 10 จงหาความยาวเส้นกึ่งกลางทุกเส้น",
"answer": "ขนาน BC = 5, ขนาน AB = 6.5, ขนาน AC = 6.5",
},
"p6": {
"level": "ยาก",
"question": "สี่เหลี่ยมคางหมู ABCD มี AB // CD, AB = 16, CD = 8 จุดกึ่งกลาง AD = M, BC = N จงหา MN",
"answer": "MN = (AB + CD)/2 = (16+8)/2 = 12 (เส้นกึ่งกลางสี่เหลี่ยมคางหมู)",
},
"p7": {
"level": "ยาก",
"question": "พิสูจน์ว่า จุดกึ่งกลางของด้านทั้ง 4 ของสี่เหลี่ยมใดๆ เมื่อเชื่อมต่อกันจะได้สี่เหลี่ยมด้านขนาน",
"answer": "ใช้ Varignon's Theorem: เส้นกึ่งกลางของสามเหลี่ยมที่แบ่งด้วยเส้นทแยงมุม ขนานกัน",
},
}
def show_practice(self):
print("=== แบบฝึกหัดเพิ่มเติม ===\n")
for key, p in self.PRACTICE.items():
print(f"[{key}] ({p['level']}) {p['question']}")
print(f" Answer: {p['answer']}")
print()
more = MoreExercises()
more.show_practice()
FAQ - คำถามที่พบบ่อย
Q: เส้นกึ่งกลางกับเส้นมัธยฐาน (Median) ต่างกันอย่างไร?
A: เส้นกึ่งกลาง (Midsegment): เชื่อมจุดกึ่งกลางของ 2 ด้าน → ขนานกับด้านที่ 3, ยาว = ครึ่งหนึ่งของด้านที่ 3 เส้นมัธยฐาน (Median): เชื่อมจุดยอดกับจุดกึ่งกลางของด้านตรงข้าม → ผ่าน centroid มีสามเหลี่ยมละ 3 เส้นกึ่งกลาง และ 3 เส้นมัธยฐาน
Q: ทำไมพื้นที่สามเหลี่ยมเส้นกึ่งกลาง = 1/4?
A: เพราะสามเหลี่ยมเส้นกึ่งกลางมีด้านยาว = 1/2 ของสามเหลี่ยมเดิมทุกด้าน อัตราส่วนความคล้าย = 1:2 → อัตราส่วนพื้นที่ = (1/2)² = 1/4 อีกวิธี: เส้นกึ่งกลาง 3 เส้นแบ่งสามเหลี่ยมเป็น 4 รูปเท่ากัน → สามเหลี่ยมตรงกลาง = 1/4 ✓
Q: Varignon's Theorem คืออะไร?
A: จุดกึ่งกลางของด้านทั้ง 4 ของสี่เหลี่ยมใดๆ เมื่อเชื่อมต่อกันจะได้สี่เหลี่ยมด้านขนานเสมอ พิสูจน์: ใช้ทฤษฎีเส้นกึ่งกลางกับสามเหลี่ยม 2 รูปที่แบ่งด้วยเส้นทแยงมุม พื้นที่ Varignon parallelogram = 1/2 ของสี่เหลี่ยมเดิม ใช้ได้กับสี่เหลี่ยมทุกชนิด ไม่จำเป็นต้องเป็นสี่เหลี่ยมปกติ
Q: เส้นกึ่งกลางใช้ในชีวิตจริงอย่างไร?
A: สถาปัตยกรรม: คำนวณโครงสร้างหลังคาสามเหลี่ยม — ค้ำยันที่จุดกึ่งกลาง วิศวกรรม: truss bridge design — เส้นกึ่งกลางช่วยคำนวณแรง Computer Graphics: mesh subdivision — แบ่ง polygon ด้วยจุดกึ่งกลาง Navigation: หาจุดกึ่งกลางระหว่าง 2 ตำแหน่ง — GPS midpoint
