KDOXG

COMO DESENHAR UMA ELIPSE POR PROGRAMAÇÃO

Oct 21st, 2019
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. PARÂMETROS:
  2. * Posição da elipse (center(x,y))
  3. * Raio horizontal (x_radius)
  4. * Raio vertical (y_radius)
  5. * Ângulo de impressão (start_angle, end_angle)
  6.  
  7. PASSOS:
  8. 1. Calcular distância do foco ao centro
  9. large = x_radius > y_radius ? x_radius : y_radius;
  10. small = x_radius > y_radius ? y_radius : x_radius;
  11. c = raiz(large**2 - small**2);
  12.  
  13. 2. Calcular posição dos dois focos usando c
  14. SE x_radius > y_radius
  15. F1(x_center - c,y_center);
  16. F2(x_center + c,y_center);
  17. SENÃO SE x_radius < y_radius
  18. F1(x_center,y_center - c);
  19. F2(x_center,y_center + c);
  20. SENÃO
  21. F1(center);
  22. F2(center);
  23.  
  24. 3. Calcular posição do ponto P pertencente à elipse dentro do ângulo de impressão
  25. A1(x_center,y_center - x)
  26. A2(x_center,y_center + x)
  27. B1(x_center,y_center - y)
  28. B2(x_center,y_center + y)
  29. P
  30.  
  31. count = start_angle;
  32. flag = 0;
  33. this_angle = 90 < end_angle ? 90 : end_angle;
  34. while (count < end_angle)
  35. while (count < this_angle)
  36. for (i = 0; i < 3; i++)
  37. for (j = 0; j < 3; j++)
  38. if ( ellipse(A1,A2,B1,B2,F1,F2,ref(P),i,j,this_angle/90) ) == 2*a)
  39. setPixel(P);
  40. flag = 1;
  41. break;
  42. if (flag == 1)
  43. break;
  44. count = count + 1;
  45.  
  46. switch (this_angle)
  47. case 90:
  48. this_angle = 180 < end_angle ? 180 : end_angle;
  49. break;
  50. case 180:
  51. this_angle = 270 < end_angle ? 270 : end_angle;
  52. break;
  53. case 270:
  54. this_angle = end_angle;
  55. break;
  56. default:
  57. this_angle = end_angle;
  58. break;
  59.  
  60. function elipse(A1, A2, B1, B2, F1, F2, ref(P), i, j, angle)
  61. switch (angle)
  62. case 0:
  63. P(x_B1 + i, y_B1 + j);
  64. return d(F1, P) + d(F2, P);
  65. case 1:
  66. P(x_A2 - i, y_A2 + j);
  67. return d(F1, P) + d(F2, P);
  68. case 2:
  69. P(x_B2 - i, y_B2 - j);
  70. return d(F1, P) + d(F2, P);
  71. case 3:
  72. P(x_A1 + i, y_A1 - j);
  73. return d(F1, P) + d(F2, P);
  74. default:
  75. return 0;
Add Comment
Please, Sign In to add comment