C如何在不使用图形库或任何其他库函数的情况下绘制点/设置像素

C如何在不使用图形库或任何其他库函数的情况下绘制点/设置像素,c,netpbm,C,Netpbm,我试图理解如何在不使用库函数的情况下绘制一组形成圆的点(/设置像素) 现在,得到给定半径的点的(x,y)坐标很简单 for (x=-r; x <r; x=x+0.1) { y = sqrt(r*r - x*x); draw(x,y, 0, 0); } 有人可以分享任何链接/参考资料或解释其工作原理吗?chardisplay[80][26]; char display[80][26]; void clearDisplay(void)

我试图理解如何在不使用库函数的情况下绘制一组形成圆的点(/设置像素)

现在,得到给定半径的点的(x,y)坐标很简单

    for (x=-r; x <r; x=x+0.1) {
         y = sqrt(r*r - x*x);
         draw(x,y, 0, 0);
     }
有人可以分享任何链接/参考资料或解释其工作原理吗?

chardisplay[80][26];
char display[80][26];

void clearDisplay(void) {
   memset(display, ' ', sizeof(display));
}

void printDisplay(void) {
  for (short row=0; row<26; row++) {
    for (short col=0; col<80; col++) {
      printf("%c", display[col][row]);
    }
    printf("\n");
  }
}


void draw(float x, float y, float center_x, float center_y) {
  if (visible(x,y)) {
    display[normalize(x)][normalize(y)] = '.';
  }
}
void清除显示(void){ memset(display),sizeof(display); } void打印显示(void){
对于(short row=0;row这是一个棘手的问题,因为从技术上讲,C没有任何内置的输入/输出功能。即使是写入文件也需要一个库。在某些系统上,如real mode DOS,您可以直接访问视频内存并通过将值写入该内存来设置像素,但现代操作系统确实阻碍了这一点。您可以尝试编写一个引导加载程序,在没有操作系统的情况下以更宽松的CPU模式启动程序,但这是一个巨大的蠕虫

因此,使用裸露的mimimum,即stdio库,您可以像其他答案所示,使用ascii图形写入stdout,或者您可以输出一种简单的图形格式,如可通过单独的图像查看程序查看的格式。更好的选择可能是这些格式


对于圆圈绘制部分,请看一下经典。或者,为了获取更多信息,Jim Blinn的第1章介绍了15种不同的圆圈绘制算法!

我有一个利用unicode盲文的文件

#包括
#包括
#包括
#定义像素_真1
#定义像素_FALSE 0
//核心功能。
盲文(整型){
如果(类型>255){
返回;
}
setlocale(LC_CTYPE,“”);
wchar_t c=0x2800+类型;
wprintf(L“%lc”,c);
}
/*
像素阵列。
0x01,0x08,
0x02,0x10,
0x04,0x20,
0x40,0x80,
*/
int pixelArr[8]={
0x01,0x08,
0x02,0x10,
0x04,0x20,
0x40,0x80
};
typedef int单元[8];
空单元格(单元格){
整数合计;
对于(int i=0;i<8;i++){
if(单元[i]==1){
总+=像素阵列[i];
}
}
盲文(总数);
}
//梅因。
内部主(空){
单元格a={
0, 1,
0, 0, 
1, 1,
0, 1
};
牵引室(a);
返回0;
}

不客气!

请定义“绘图”!如果您的意思是:“在显示器上打印”,这很大程度上取决于您使用的系统。很好…-但为什么26不是25,甚至更好24?向我提供了有关
可见
规范化
函数的警告。在哪里可以找到它们?
char display[80][26];

void clearDisplay(void) {
   memset(display, ' ', sizeof(display));
}

void printDisplay(void) {
  for (short row=0; row<26; row++) {
    for (short col=0; col<80; col++) {
      printf("%c", display[col][row]);
    }
    printf("\n");
  }
}


void draw(float x, float y, float center_x, float center_y) {
  if (visible(x,y)) {
    display[normalize(x)][normalize(y)] = '.';
  }
}