计算机图形学---基于整个屏幕像素点的直接画圆法

基于整个屏幕像素点的直接画圆法

用来记录一个基于整个屏幕像素点的直接画圆法!

算法简介

计算机图形学---基于整个屏幕像素点的直接画圆法_第1张图片
设直线的两个端点是A(Xa,Ya)和B(Xb,Yb),则我们仅需考虑x=Xa,x=Xb,y=Ya,y=Yb四条线围成的矩形区域内的每一个像素点的情况,设P(X0,Y0);是该区域的任意像素点,则可以通过判断P到直线AB之间的距离来决定P点是否被点亮。
点到直线的距离公式
d = ∣ A x 0 + B y 0 + C A 2 + b 2 ∣ d=|\frac{Ax0+By0+C}{ \sqrt{A^2+b^2}}| d=A2+b2 Ax0+By0+C
公式中的直线方程为
AX+By+C=0

点P的坐标为(x0,y0)。
因此得首先计算AB的表达式,
(y-yb)=(Yb-Ya)/(Xb-Xa)
整理得:(Yb-Ya)*x+(Xa-Xb)*y+Yb*(Xb-Xa)-Xb*(Yb-Ya)=0
所以:A=(Yb-Ya),B=(Xa-Xb),C=Yb*(Xb-Xa)-Xb*(Yb-Ya)
当d<=0.5时,点亮该像素点;

代码

#include "graphics.h"
#include "math.h"

void myCircle1(int xc,int yc,int r,int color){
    int d;
    for(int i=0;i<=800;i++)
        for(int j=0;j<=600;j++){		//双重循环遍历矩形范围内的所有点
            d=sqrt((i-xc)*(i-xc)+(j-yc)*(j-yc));	//计算d的值
            if(d>=r-0.5&&d<=r+0.5)					//判断d的值
                putpixel(i,j,color);				//点亮像素点
        }
}

##主函数

int main()
{
    initgraph(800,600);
    setbkcolor(WHITE);
    setcolor(BLACK);
    myCircle1(300,150,100,RED);
    setfont(16, 0,"宋体");
    outtextxy(300, 150,"myCircle1");
    getch();
    closegraph();
}

运行结果

计算机图形学---基于整个屏幕像素点的直接画圆法_第2张图片

你可能感兴趣的:(计算机图形学)