Guest User

Untitled

a guest
Apr 26th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. def qmul(A_x, A_y, A_z, A_w, B_x, B_y, B_z, B_w):
  2. C_x = A_x*B_x - A_y*B_y - A_z*B_z - A_w*B_w
  3. C_y = A_x*B_y + A_y*B_x + A_z*B_w - A_w*B_z
  4. C_z = A_x*B_z - A_y*B_w + A_z*B_x + A_w*B_y
  5. C_w = A_x*B_w + A_y*B_z - A_z*B_y + A_w*B_x
  6.  
  7. return C_x, C_y, C_z, C_w
  8.  
  9. def qadd(A_x, A_y, A_z, A_w, B_x, B_y, B_z, B_w):
  10. C_x = A_x + B_x
  11. C_y = A_y + B_y
  12. C_z = A_z + B_z
  13. C_w = A_w + B_w
  14.  
  15. return C_x, C_y, C_z, C_w
  16.  
  17. # Quaternion Julia set Z = Z*Z + C
  18. def quat_function(x, y, z):
  19. Z_x = x
  20. Z_y = y
  21. Z_z = z
  22. Z_w = 0
  23. C_x = 0.3 # values of 0 for C make for a unit ball
  24. C_y = 0.5
  25. C_z = 0.4
  26. C_w = 0.2
  27. threshold = 4
  28. max_iterations = 8
  29. len_sq = Z_x*Z_x + Z_y*Z_y + Z_z*Z_z + Z_w*Z_w
  30. threshold_sq = threshold*threshold
  31.  
  32. for i in range(0, max_iterations):
  33. Z_x, Z_y, Z_z, Z_w = qmul(Z_x, Z_y, Z_z, Z_w, Z_x, Z_y, Z_z, Z_w) # Z*Z
  34. Z_x, Z_y, Z_z, Z_w = qadd(Z_x, Z_y, Z_z, Z_w, C_x, C_y, C_z, C_w) # + C
  35.  
  36. len_sq = Z_x*Z_x + Z_y*Z_y + Z_z*Z_z + Z_w*Z_w
  37.  
  38. if len_sq > threshold_sq:
  39. break;
  40.  
  41. return threshold - math.sqrt(len_sq)
Add Comment
Please, Sign In to add comment