有创建椭圆的代码,但现在我需要创建一个动画,其中点将沿着 eptical 线移动。我还需要更改代码,因为我需要使用 input() 函数输入椭圆的半径,并可能使用 scatter 函数在椭圆中心绘制点。
import math # papildus aprēķiniem
import numpy as np # matricas datu apstrādei
import matplotlib.pyplot as plt # grafiku attēlošanai
img = np.ones((200, 800, 3)) # attēls, augstums, platums, kanālu skaits jeb RGB
def DrawEllipse(xc, yc, rx, ry):
# xc, yc - elipses centra koordinātes
# rx, ry - lielāka un mazāka pusass
xk = 0 # sākotnējās x un y koordinātes
yk = ry
# -----------1.daļa
pk = ry ** 2 - rx ** 2 * ry + 1 / 4 * rx ** 2 # risinošā parametra vērtība
img[xc + xk, yc + yk] = 0 # zīmējam sākotnejās koordinātes 4 kvadrantiem
img[xc - xk, yc + yk] = 0
img[xc + xk, yc - yk] = 0
img[xc - xk, yc - yk] = 0
while ry ** 2 * xk < rx ** 2 * yk:
xk += 1 # vai xk=xk+1
if pk > 0: # vidējais punkts atrodas ārpus elipses līnijas
yk -= 1 # vai yk=yk-1
pk = pk + 2 * ry ** 2 * xk + ry ** 2 - 2 * rx ** 2 * yk
else: # vidējais punkts atrodas elipses līnijas iekšā vai uz tās
pk = pk + 2 * ry ** 2 * xk + ry ** 2
# zīmējam elipses koordinātes
img[xc + xk, yc + yk] = 0 # zīmējam sākotnejās koordinātes 4 kvadrantiem
img[xc - xk, yc + yk] = 0
img[xc + xk, yc - yk] = 0
img[xc - xk, yc - yk] = 0
# --------2.daļa -> izpildam paši
pk = ry ** 2 * (xk + 1 / 2) ** 2 + rx ** 2 * (yk - 1) ** 2 - (rx ** 2 * ry ** 2) # otrs moteicošais parametrs
img[xc + xk, yc + yk] = 0 # zīmējam sākotnejās koordinātes 4 kvadrantiem
img[xc - xk, yc + yk] = 0
img[xc + xk, yc - yk] = 0
img[xc - xk, yc - yk] = 0
while yk > 0:
yk -= 1
if pk > 0:
pk = pk - 2 * rx ** 2 * yk + rx ** 2
else:
xk += 1
pk = pk - 2 * rx ** 2 * yk + rx ** 2 + 2 * ry ** 2 * xk
img[xc + xk, yc + yk] = 0 # zīmējam sākotnejās koordinātes 4 kvadrantiem
img[xc - xk, yc + yk] = 0
img[xc + xk, yc - yk] = 0
img[xc - xk, yc - yk] = 0
# pk=ry**2-rx**2*ry+1/4*rx**2 #risinošā parametra vērtība Formulu/tikai cita
# while
# yk -=1
return
DrawEllipse(100, 50, 50, 25)
plt.figure(figsize=(10, 8), dpi=100, facecolor='w')
plt.imshow(img)
plt.show()