怎么用c语言弄出斜线还有三角形呢?

喂请叫我斌哥 2013-08-14 11:52:16
求哪位大神,帮忙想下,直接用c语言编写出画斜线和三角型的函数,不调用库函数的
...全文
1574 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-08-22
  • 打赏
  • 举报
回复
没有图形操作系统,你也许可以像DOS那样,直接在屏幕上画点 然后自己写画线的算法,即可; 现在那些东西,都受到操作系统控制了。 不给你机会,自己在屏幕上画图了,你画上去,由于程序不停的运行,很快就被擦除了。 直接写屏 地址:0xa000 :0000 图形方式。 0xb000 :0000 文本方式。 基本上画图,都要使用API了。 另外,画图本身,除了使用API外,不用使用C,C++标准库的任何代码。 而且,MFC不属于标准库。
kasim0070 2013-08-22
  • 打赏
  • 举报
回复
好像可以直接用函数- -
  • 打赏
  • 举报
回复
想当年,我也为这种事纠结了N久的。 后来才知道,图形库的问题。。。
赵4老师 2013-08-22
  • 打赏
  • 举报
回复 1
printf("/△");
lm_whales 2013-08-22
  • 打赏
  • 举报
回复
DOS下,可以使用 bios 0x10 中断,画点
WizardOz 2013-08-15
  • 打赏
  • 举报
回复
我想LZ的意思并不是不调用任何库函数,而是在画直线和画三角形的算法上要自己实现,是这个意思吧?
  • 打赏
  • 举报
回复
windows下 VC的DC上可以画。 OPenGl也可以。
赵4老师 2013-08-14
  • 打赏
  • 举报
回复
仅供参考
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "graphics.h"
void DDA_line0(int x0,int y0,int y1,int color) {//画线函数 斜率k=无穷大
    int y;

    for (y=y0;y<=y1;y++) putpixel(x0,y,color);
}
void DDA_line1(int x0,int y0,int x1,int color,float k) {//画线函数 斜率|k|<=1
    int x;
    float y;

    y=y0;
    for (x=x0;x<=x1;x++) {
        putpixel(x,(int)(y+0.5),color);
        y=y+k;
    }
}
void DDA_line2(int x0,int y0,int y1,int color,float k) {//画线函数 斜率|k|>1
    int y;
    float x,k1;

    x=x0;
    k1=1.0/k;
    for (y=y0;y<=y1;y++) {
        putpixel((int)(x+0.5),y,color);
        x=x+k1;
    }
}
void main() {
    int x0=0,y0=0,x1=0,y1=0;//起点(x0,y0) 终点(x1,y1)
    int gd=DETECT,gm,color=EGA_MAGENTA,errorcode,maxx,maxy;
    float k=0,temp_x,temp_y;

    initgraph(&gd,&gm,"D:\\BC\\BGI");
    errorcode = graphresult();
    if (errorcode != grOk) {
       printf("Graphics error: %s\n", grapherrormsg(errorcode));
       printf("Press any key to exit");
       getch();
       exit(1);
    }
    maxx=getmaxx();
    maxy=getmaxy();
    printf("Input x0 y0 x1 y1 (Note:0<=x0<x1<=%d,0<=y0<y1<=%d):",maxx,maxy);
    scanf("%d %d %d %d",&x0,&y0,&x1,&y1);
    if (0<=x0 && x0<=maxx
     && 0<=x1 && x1<=maxx
     && x0<x1
     && 0<=y0 && y0<=maxy
     && 0<=y1 && y1<=maxy
     && y0<y1) {
        if (x0==x1) DDA_line0(x0,x1,y1,color);
        else {
            temp_y=y1-y0;
            temp_x=x1-x0;
            k=temp_y/temp_x;
            if (-1<=k && k<=1) DDA_line1(x0,y0,x1,color,k);
            else DDA_line2(x0,y0,y1,color,k);
        }
    } else {
        printf("Input x0,y0,x1,y1=%d,%d,%d,%d is invalid. (Note:0<=x0<x1<=%d,0<=y0<y1<=%d)\n",x0,y0,x1,y1,maxx,maxy);
    }
    getch();
    closegraph();
}
loveour 2013-08-14
  • 打赏
  • 举报
回复
学图形学的时候需要了解线的生成算法,是不能用库来画直线的,而只能自己生成直线,用点画出来。百度一下Bresenham算法,这是一个直线的生成算法。只要有了直线,三角形自然也有了。
zgy6877124 2013-08-14
  • 打赏
  • 举报
回复
WINAPI里面有各种你需要的啊!不过很多也是封装的。
JasonCharlesBourne 2013-08-14
  • 打赏
  • 举报
回复
不调用库函数怎么画,除非你用"."表示一个点。printf"."连成一条直线
飞天狐213 2013-08-14
  • 打赏
  • 举报
回复
建议楼主用TC2.0,神器!它里面有丰富的图形库!(至于你说不用库,我想知道,既然有为啥不用呢?)
赵4老师 2013-08-14
  • 打赏
  • 举报
回复
仅供参考
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = FALSE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void ShowTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = TRUE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
int main() {
    HWND  hwnd;
    HDC   hdc;
    HFONT hfont;
    int i,x,y;


    srand(time(NULL));
    system("color F0");
    system("cls");
    HideTheCursor();
    hwnd  = GetConsoleWindow();
    hdc   = GetDC(hwnd);
    hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
    SelectObject(hdc,hfont);
    TextOut(hdc,10,10,"地球人都知道!",14);
    MoveToEx(hdc,5,5,NULL);
    LineTo(hdc,300,  5);
    LineTo(hdc,300, 60);
    LineTo(hdc,  5, 60);
    LineTo(hdc,  5,  5);
    for (i=0;i<100;i++) {
        x=rand()%400;
        y=rand()%300;
        SetPixel(hdc,x,y,0);
    }
    DeleteObject(hfont);
    ReleaseDC(hwnd,hdc);
    getchar();
    system("color 07");
    system("cls");
    ShowTheCursor();
    return 0;
}
V____ 2013-08-14
  • 打赏
  • 举报
回复
openGL 上学的时候好像有学过这东西~~ 考试的时候考了一道题是 画圆的程序大题~~~
赵4老师 2013-08-14
  • 打赏
  • 举报
回复
帖主想直接操作显存?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧