
Однако увеличение масштаба на 50-й итерации привело к значительной задержке и неточному рендерингу, что затруднило дальнейшее исследование. Кроме того, ручное кодирование конструкций в GeoGebra отнимало много времени (более 6 часов для 50 итераций).
Я работаю над общей версией этого вопроса, для которой требуется много последовательностей. нарисовано сразу, и использование GeoGebra кажется неудобным.
Я написал этот код, который может вычислять точки пятиугольника:
Код: Выделить всё
import math
print("Number of pentagons")
n=int(input() )
m=max(n,50)
m= min(m, 200)
from decimal import Decimal
import decimal
decimal.getcontext().prec = m
Decimal(10)**(-m)
# enter your coordinates here
A=[Decimal(0),Decimal(0)]
B=[Decimal(0),Decimal(0)]
C=[Decimal(0),Decimal(0)]
D=[Decimal(0),Decimal(0)]
E=[Decimal(0),Decimal(0)]
print("Enter the coordinates of A_1")
A[0]=Decimal(float (input() ))
A[1]=Decimal(float (input() ))
print("Enter the coordinates of B_1")
B[0]=Decimal(float (input() ))
B[1]=Decimal(float (input() ))
print("Enter the coordinates of C_1")
C[0]=Decimal(float (input() ))
C[1]=Decimal(float (input() ))
print("Enter the coordinates of D_1")
D[0]=Decimal(float (input() ))
D[1]=Decimal(float (input() ))
print("Enter the coordinates of E_1")
E[0]=Decimal(float (input() ))
E[1]=Decimal(float (input() ))
X=[Decimal(0),Decimal(0)]
Y=[Decimal(0),Decimal(0)]
Z=[Decimal(0),Decimal(0)]
W=[Decimal(0),Decimal(0)]
T=[Decimal(0),Decimal(0)]
#defining some useful functions--------------------------------------------
def v(a,b):
result= [b[0]-a[0], b[1]-a[1]]
return result
def crs(a, b):
result = [-Decimal(0.5)*((Decimal(a[0]*b[1])-Decimal(a[1]*b[0])))]
return result
def dis(a,b):
result =[Decimal(math.sqrt((a[0]-b[0])**2+(a[1]-b[1])**2))]
return result
for i in range (2,n+1):
AB= dis(A,B)[0]
BC= dis(B,C)[0]
CD= dis(C,D)[0]
DE= dis(D,E)[0]
EA= dis(E,A)[0]
#Here to calculate A_n--------------------------------------------
x= CD*crs(v(D,C),v(D,E))[0]
y= -CD*crs(v(E,D),v(E,B))[0]+ 2*DE*crs(v(C,B),v(C,D))[0]
z= -CD*crs(v(C,B),v(C,E))[0]+ 2*BC*crs(v(D,C),v(D,E))[0]
t= CD*crs(v(C,B),v(C,D))[0]
X[0]=(x *B[0]+y*C[0]+z*D[0]+t*E[0])/(x+y+z+t)
X[1]=(x *B[1]+y*C[1]+z*D[1]+t*E[1])/(x+y+z+t)
#Here to calculate B_n--------------------------------------------
x= DE*crs(v(E,D),v(E,A))[0]
y= -DE*crs(v(A,E),v(A,C))[0]+ 2*EA*crs(v(D,C),v(D,E))[0]
z= -DE*crs(v(D,C),v(D,A))[0]+ 2*CD*crs(v(E,D),v(E,A))[0]
t= DE*crs(v(D,C),v(D,E))[0]
Y[0]=(x *C[0]+y*D[0]+z*E[0]+t*A[0])/(x+y+z+t)
Y[1]=(x *C[1]+y*D[1]+z*E[1]+t*A[1])/(x+y+z+t)
#Here to calculate C_n--------------------------------------------
x= EA*crs(v(A,E),v(A,B))[0]
y= -EA*crs(v(B,A),v(B,D))[0]+ 2*AB*crs(v(E,D),v(E,A))[0]
z= -EA*crs(v(E,D),v(E,B))[0]+ 2*DE*crs(v(A,E),v(A,B))[0]
t= EA*crs(v(E,D),v(E,A))[0]
Z[0]=(x *D[0]+y*E[0]+z*A[0]+t*B[0])/(x+y+z+t)
Z[1]=(x *D[1]+y*E[1]+z*A[1]+t*B[1])/(x+y+z+t)
#Here to calculate D_n--------------------------------------------
x= AB*crs(v(B,A),v(B,C))[0]
y= -AB*crs(v(C,B),v(C,E))[0]+ 2*BC*crs(v(A,E),v(A,B))[0]
z= -AB*crs(v(A,E),v(A,C))[0]+ 2*EA*crs(v(B,A),v(B,C))[0]
t= AB*crs(v(A,E),v(A,B))[0]
W[0]=(x *E[0]+y*A[0]+z*B[0]+t*C[0])/(x+y+z+t)
W[1]=(x *E[1]+y*A[1]+z*B[1]+t*C[1])/(x+y+z+t)
#Here to calculate E_n--------------------------------------------
x= BC*crs(v(C,B),v(C,D))[0]
y= -BC*crs(v(D,C),v(D,A))[0]+ 2*CD*crs(v(B,A),v(B,C))[0]
z= -BC*crs(v(B,A),v(B,D))[0]+ 2*AB*crs(v(C,B),v(C,D))[0]
t= BC*crs(v(B,A),v(B,C))[0]
T[0]=(x *A[0]+y*B[0]+z*C[0]+t*D[0])/(x+y+z+t)
T[1]=(x *A[1]+y*B[1]+z*C[1]+t*D[1])/(x+y+z+t)
A=X
B=Y
C=Z
D=W
E=T
print(f"A_{i}= {A}")
print(f"B_{i}= {B}")
print(f"C_{i}= {C}")
print(f"D_{i}= {D}")
print(f"E_{i}= {E}")
print("\n")
- Использование стандартных 15-значных результатов при делении нулевыми ошибками после 20-30 итераций, поэтому мой код должен использовать более 15 знаков после запятой. Я решил эту проблему с помощью библиотеки Decimal в Python, которая обрабатывает значения как строки, что делает невозможным построение графика.
- Мне нужно построить график нескольких многоугольников, и их должно быть не менее 15 разных. различимые цвета, которые зацикливаются, чтобы избежать визуального перекрытия. Я не знаю, как этого добиться.
- Предполагая, что я могу решить вышеуказанные проблемы, мне нужно создать плавную анимацию увеличения. Увеличение масштаба происходит плавно, поэтому я не могу просто рисовать эти пятиугольники и записывать, пока увеличиваю масштаб.
Подробнее здесь: https://stackoverflow.com/questions/788 ... ing-python