Approksimering af cirkler og ellipser
Stryg for at vise menuen
Ved geometrisk modellering er det ofte nødvendigt at repræsentere glatte kurver som cirkler og ellipser ved hjælp af et endeligt sæt punkter. Dette er essentielt, fordi computere arbejder med diskrete data, så kontinuerlige kurver skal tilnærmes ved at forbinde disse punkter med rette linjer, hvilket danner en polygonal form, der tæt følger den ønskede kurve. Jo flere punkter der anvendes, desto bedre bliver tilnærmelsen.
For cirkler fordeles punkterne jævnt omkring omkredsen ved at variere vinklen fra 0 til 2π. For ellipser anvendes de parametriske ligninger x = a * cos(t) og y = b * sin(t), hvor a og b er henholdsvis ellipse's store og lille halvakse, og t varierer fra 0 til 2π. Ved at øge antallet af punkter (eller sider) skabes former, der visuelt nærmer sig den sande kurve, hvilket især er nyttigt til rendering, kollisionsdetektion og geometrisk analyse.
12345678910111213141516171819202122232425262728293031323334import numpy as np import matplotlib.pyplot as plt def ellipse_points(a, b, num_points): """ Generate points for a polygonal approximation of an ellipse. Parameters: a (float): semi-major axis length b (float): semi-minor axis length num_points (int): number of points (polygon sides) Returns: np.ndarray: array of (x, y) points """ t = np.linspace(0, 2 * np.pi, num_points, endpoint=False) x = a * np.cos(t) y = b * np.sin(t) return np.column_stack((x, y)) ellipse = ellipse_points(5, 3, 12) print(ellipse) # Visualization with closed polygon ellipse_closed = np.vstack([ellipse, ellipse[0]]) # Append the first point to the end plt.figure(figsize=(6, 6)) plt.plot(ellipse_closed[:, 0], ellipse_closed[:, 1], 'o-', label='Polygonal Approximation (Closed)') plt.gca().set_aspect('equal') plt.grid(True) plt.title('Ellipse Approximation with 12 Points (Closed)') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show()
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat