Алгоритм Брезенхема для прямой и окружности
Primary tabs
Forums:
алгоритм немного недоделанный
прямая пока может быть задана только под определенным углом
/
будет допилено и исправлено (готовую задачу не нашел, а переписывать сейчас влом)
namespace WFA2 { public partial class Form1 : Form { static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); private Graphics g; public Form1() { InitializeComponent(); Paint += new PaintEventHandler(Form1_Paint); } private void Form1_Paint(object sender, PaintEventArgs e) { g = this.CreateGraphics(); BresenhamCircle(200, 200, 70); // тут задаются координаты начальной точки и радиуса круга draw_br_line2(100, 100, 400, 140); // тут задаются две точки меджу которыми рисуется брезенхемовская прямая } private void Form1_Load(object sender, EventArgs e) { } void draw_br_line2(int x0, int y0, int x1, int y1) // линия { Brush b1 = new SolidBrush(Color.Black); // g.FillRectangle(b1, 250, 260, 2, 2); int x = x0, y = y0, i = x0; double Dy = 0, Dx = 0, D = 0, X = x0, Y = y0; g.FillRectangle(b1, x0, y0, 4, 4); // жирный квадратик - начальная точка (для удобства) while (x < x1) { g.FillRectangle(b1, x, y, 2, 2); Y = (y1 - y0) * (X - x0) / (x1 - x0) + y0; Dy = Y - y; if (Dy > 0.5) { y++; } if (x0 < x1) { x++; } if (x0 > x1) { x--; } X = x; } while (x > x1) { g.FillRectangle(b1, x, y, 2, 2); Y = (y1 - y0) * (X - x0) / (x1 - x0) + y0; Dy = Y - y; if (Dy > 0.5) { y++; } if (x0 > x1) { x--; } X = x; } } //...................... void BresenhamCircle(int x0, int y0, int radius) // круг { Brush b1 = new SolidBrush(Color.Black); int x = radius; int y = 0; int radiusError = 1 - x; g.FillRectangle(b1, x0, y0, 4, 4); while (x >= y) { g.FillRectangle(b1, x + x0, y + y0, 2, 2); g.FillRectangle(b1, y + x0, x + y0, 2, 2); g.FillRectangle(b1, -x + x0, y + y0, 2, 2); g.FillRectangle(b1, -y + x0, x + y0, 2, 2); g.FillRectangle(b1, -x + x0, -y + y0, 2, 2); g.FillRectangle(b1, -y + x0, -x + y0, 2, 2); g.FillRectangle(b1, x + x0, -y + y0, 2, 2); g.FillRectangle(b1, y + x0, -x + y0, 2, 2); y++; if (radiusError < 0) { radiusError += 2 * y + 1; } else { x--; radiusError += 2 * (y - x + 1); } } } /////////////////// } }
- Log in to post comments
- 12732 reads
vedro-compota
Wed, 01/29/2014 - 11:48
Permalink
алгоритм брезенхема
особенно в заголовке можно написать так:
Спасибо за вклад)
_____________
матфак вгу и остальная классика =)