convex hull (tsz. convex hulls)
A convex hull (konvex burok) egy adott pontkészlet legkisebb konvex halmaza, amely tartalmazza az összes pontot. Geometriailag elképzelheted úgy, mint amikor egy rugalmas gumiszálat feszítesz ki a pontok köré – a gumiszál körbefogja a pontokat, ez a konvex burok.
Formálisan: Legyen egy pontkészlet.
A convex hull (jele: ) az összes olyan konvex kombináció halmaza, amely a pontjaiból áll:
Ez tehát a legkisebb konvex halmaz, amely tartalmazza -t.
Tulajdonság | Leírás |
---|---|
Konvex | Bármely két pont közti szakasz is benne van |
Legkisebb | Nincs kisebb konvex halmaz, ami tartalmazza az összes pontot |
Zárt | A konvex burok mindig zárt halmaz |
Síkban | Legkevesebb pont határozza meg (sokszög) |
Adott pontok:
(0,0), (1,1), (2,2), (0,3), (3,0), (3,3), (1,2)
A konvex burok ezek köré húzott minimális konvex sokszög:
(0,0) → (3,0) → (3,3) → (0,3) → vissza (0,0)
A belső pontok, mint (1,1) vagy (1,2), nem részei a burokperemnek.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
struct Point {
int x, y;
};
int cross(const Point& O, const Point& A, const Point& B) {
return (A.x - O.x)*(B.y - O.y) - (A.y - O.y)*(B.x - O.x);
}
std::vector<Point> convexHull(std::vector<Point> P) {
int n = P.size(), k = 0;
if (n <= 3) return P;
std::vector<Point> H(2*n);
std::sort(P.begin(), P.end(), (Point a, Point b) {
return a.x < b.x || (a.x == b.x && a.y < b.y);
});
// Alsó burok
for (int i = 0; i < n; ++i) {
while (k >= 2 && cross(H, H, P) <= 0) k--;
H = P;
}
// Felső burok
for (int i = n-2, t = k+1; i >= 0; --i) {
while (k >= t && cross(H, H, P) <= 0) k--;
H = P;
}
H.resize(k-1);
return H;
}
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import ConvexHull
points = np.random.rand(30, 2)
hull = ConvexHull(points)
plt.plot(points, points, 'o')
for simplex in hull.simplices:
plt.plot(points, points, 'k-')
plt.fill(points, points, 'lightblue', alpha=0.3)
plt.title("Convex Hull")
plt.show()
Fogalom | Jelentés |
---|---|
Convex hull | Legkisebb konvex halmaz, amely tartalmaz egy adott pontkészletet |
Matematikai alak | Minden konvex kombinációja a pontoknak |
2D jelentés | Konvex sokszög, ami körbezárja a pontokat |
Algoritmusok | Graham scan, Jarvis march, QuickHull |
Felhasználás | Grafika, AI, térinformatika, klaszterezés, optimalizáció |
A konvex burok segít geometriai struktúrák egyszerűsítésében, komplex rendszerek körülhatárolásában és matematikai optimalizálásban. Elengedhetetlen a számítógépes geometria alapfogalmai között.