เส้นกลางของสามเหลี่ยม
เส้นกลาง 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}")
เคล็ดลับ
- Midpoint: เฉลี่ย x และ y ของจุดปลายทั้งสอง
- Midsegment: ขนานด้านที่สาม ยาวครึ่งหนึ่ง
- Heron: ใช้ Heron's Formula คำนวณพื้นที่จากด้าน 3 ด้าน
- numpy: ใช้ numpy สำหรับ Vector Operations เร็วกว่า
- shapely: ใช้ shapely สำหรับ Complex Geometric Operations
เส้นกลางของสามเหลี่ยมคืออะไร
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
