Я пытаюсь преобразовать уравнение указана here в код Python:Проблемы преобразование фрактального уравнения для алгоритма Python
r = +/- (1+1.414sin(theta)cos(theta)-0.5cos(theta)cos(theta))^(1/6)exp(-0.4714(theta))
Это мой результат (немного взломан для целей тестирования):
import random
import pygame
import math
from pygame.locals import *
def random_spiral_pos(maxradius,theta=None):
"Finds a random position in a spiral galaxy pattern."
#Get a random angle (in rad). Could do this with a random
#variable in the range (0,2*pi), but this i clearer if inefficient
if theta == None:
theta=math.radians(random.randint(0,360))
#Then use a fractal equation to get distance from center as a function
#of angle
#Source: http://www.philica.com/display_observation.php?observation_id=52
r = (1+1.414*math.sin(theta)*math.cos(theta) -0.5*math.cos(theta)*math.cos(theta))**(1/6)*math.exp(-0.4714*theta)
print(r)
#R will be in the range 0-1, so we multiply it by
#the radius of our drawing area
r=r*maxradius
#Convert the angle into polar coordinates, give the resultant vector
#magnitude R (polar coordinates are a direction vector from the
#origin), then floor those values so Pygame can use them
x=math.floor(math.cos(theta)*r)
y=math.floor(math.sin(theta)*r)
x=x+maxradius//2
y=y+maxradius//2
return (x,y)
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode((600,600))
clock=pygame.time.Clock()
pygame.key.set_repeat(25,5)
#Main loop
while 1:
#timing
clock.tick(60)
#gfx
screen.fill((0,0,0))
screen.lock()
for t in range (0,360):
screen.set_at(random_spiral_pos(100,math.radians(t)),(255,255,255))
screen.unlock()
pygame.display.flip()
Однако результат кажется просто простой спиралью. Скорее всего, я только что сделал ошибку в преобразовании математической функции в оператор Python, так как представленная здесь математика - это некоторые способы, которые меня не устраивают. Это так, и как это должно быть выражено, если так?
Ваша модификация кода привносит ее в соответствие с тем, что предлагает графический инструмент автора, спасибо! Я использую Python 3, но я буду помнить об этом. К сожалению, я до сих пор не могу понять, как уравнение должно дать «график типичной спиральной галактики» ... – Schilcote
В случае, если это помогло вам [принять ответ] (http://stackoverflow.com/help/accepted-answer) –
Ну, проблема не решена, так как код не делает то, что мне нужно, но я уверен, что просто полностью не понимаю, с чем я работаю. – Schilcote