Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Брезенхем для эллипса
- unsigned long long BresEllipse(QImage &image, QPoint c, int a, int b, QRgb col)
- {
- unsigned long long start, dur;
- int a2 = a*a, b2 = b*b;
- int x = 0, y = b, d = 2*b2+a2-2*b*a2;
- double xm = a2/sqrt(a2+b2);
- start = tick();
- // От x=0 до x=xm
- while (x <= xm)
- {
- image.setPixel(x+c.x()+x_off, y-c.y()+y_off, col);
- image.setPixel(x+c.x()+x_off, -y-c.y()+y_off, col);
- image.setPixel(-x+c.x()+x_off, y-c.y()+y_off, col);
- image.setPixel(-x+c.x()+x_off, -y-c.y()+y_off, col);
- if (d > 0) // Если выбрана точка Т
- {
- y--;
- d += 4*b2*x+6*b2-4*a2*y;
- }
- else // Если выбрана точка S
- d += 4*b2*x+6*b2;
- x++;
- }
- d = 2*a2-2*b2*a+b2;
- x = a;
- y = 0;
- // От x=xm до x=a
- while (x >= xm)
- {
- image.setPixel(x+c.x()+x_off, y-c.y()+y_off, col);
- image.setPixel(x+c.x()+x_off, -y-c.y()+y_off, col);
- image.setPixel(-x+c.x()+x_off, y-c.y()+y_off, col);
- image.setPixel(-x+c.x()+x_off, -y-c.y()+y_off, col);
- if (d > 0) // Если выбрана точка Т
- {
- x--;
- d += 4*a2*y+6*a2-4*b2*x;
- }
- else // Если выбрана точка S
- d += 4*a2*y+6*a2;
- y++;
- }
- dur = tick();
- return dur-start;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement