Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. // Брезенхем для эллипса
  2. unsigned long long BresEllipse(QImage &image, QPoint c, int a, int b, QRgb col)
  3. {
  4. unsigned long long start, dur;
  5. int a2 = a*a, b2 = b*b;
  6. int x = 0, y = b, d = 2*b2+a2-2*b*a2;
  7. double xm = a2/sqrt(a2+b2);
  8. start = tick();
  9.  
  10. // От x=0 до x=xm
  11. while (x <= xm)
  12. {
  13. image.setPixel(x+c.x()+x_off, y-c.y()+y_off, col);
  14. image.setPixel(x+c.x()+x_off, -y-c.y()+y_off, col);
  15. image.setPixel(-x+c.x()+x_off, y-c.y()+y_off, col);
  16. image.setPixel(-x+c.x()+x_off, -y-c.y()+y_off, col);
  17.  
  18. if (d > 0) // Если выбрана точка Т
  19. {
  20. y--;
  21. d += 4*b2*x+6*b2-4*a2*y;
  22. }
  23. else // Если выбрана точка S
  24. d += 4*b2*x+6*b2;
  25. x++;
  26. }
  27.  
  28. d = 2*a2-2*b2*a+b2;
  29. x = a;
  30. y = 0;
  31.  
  32. // От x=xm до x=a
  33. while (x >= xm)
  34. {
  35. image.setPixel(x+c.x()+x_off, y-c.y()+y_off, col);
  36. image.setPixel(x+c.x()+x_off, -y-c.y()+y_off, col);
  37. image.setPixel(-x+c.x()+x_off, y-c.y()+y_off, col);
  38. image.setPixel(-x+c.x()+x_off, -y-c.y()+y_off, col);
  39.  
  40. if (d > 0) // Если выбрана точка Т
  41. {
  42. x--;
  43. d += 4*a2*y+6*a2-4*b2*x;
  44. }
  45. else // Если выбрана точка S
  46. d += 4*a2*y+6*a2;
  47. y++;
  48. }
  49.  
  50. dur = tick();
  51. return dur-start;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement