5. 2d 원 그리기
반응형
라인으로 사각형도 그리고 삼각형도 그리고,
쉽게쉽게 할수 있다.
그렇다면 원은 어떨까?
예전에 이 원그리기를 만들때 자료구조책을 보면서 만들었었는데
그 책이 어떤책인지 기억이 잘 나지 않는다.
결국 내용은 이전에 다루었던 브레즌햄? 알고리즘으로 그림.
지금보니 알고리즘이 잘 이해가 안가지만 굳이 시간을 쏟고 싶지 않아서 넘김.
코드를 기록으로 남김.
더보기
void Dib::DrawCircle(NVertex v1, NVertex v2)
{
int x_coor;
int y_coor;
int p_value;
int r;
NVertex coor;
coor.x = 0;
// 원의 방정식을 사용하여 원의 반지름 (coor.y)를 구한다.
coor.y = sqrt((double)(v2.x - v1.x) * (v2.x - v1.x) + (v2.y - v1.y) * (v2.y - v1.y));
p_value = 3 - 2 * coor.y;
while ( coor.x < coor.y)
{
PloatCircle(v1, coor);
if ( p_value < 0)
{
p_value += 4 * coor.x +6;
}
else
{
p_value += 4 * ( coor.x - coor.y) +10;
coor.y--;
}
coor.x++;
}
if ( coor.x == coor.y)
PloatCircle(v1, coor);
}
void Dib::PloatCircle(NVertex v, NVertex coor)
{
//8방향.
DrawPixel( v.x +coor.x, v.y +coor.y);
DrawPixel( v.x -coor.x, v.y +coor.y);
DrawPixel( v.x +coor.x, v.y -coor.y);
DrawPixel( v.x -coor.x, v.y -coor.y);
DrawPixel( v.x +coor.y, v.y +coor.x);
DrawPixel( v.x -coor.y, v.y +coor.x);
DrawPixel( v.x +coor.y, v.y -coor.x);
DrawPixel( v.x -coor.y, v.y -coor.x);
}
'작업장 > Software Renderer' 카테고리의 다른 글
4. 2D 클리핑. (0) | 2021.02.07 |
---|---|
3. [software renderer] 선 그리기 (0) | 2021.01.07 |
2. [software renderer] 점찍기 (0) | 2021.01.07 |
1. [software renderer] 시작 (0) | 2020.09.08 |
TAGS.