当前位置:首页 » 编程语言 » 用c语言画图

用c语言画图

发布时间: 2025-10-15 09:03:15

❶ 用c语言写程序,此程序能画出来函数y=2x+5的曲线图形。

此题把数学问题转化为用C语言描述即可,很多画图问题可以使用这种方法。

  1. 假设屏幕左上角为坐标轴原点



#include<stdio.h>
#defineMAX30//选定曲线要显示的范围,因为一次函数是一条直线,所以它的显示范围无穷
intmain()
{
intx,y;
for(y=30;y>=0;y--)
{
for(x=0;x<MAX;x++)
{
if(y==2*x+5)
{
printf("*");
}
else
{
printf("");//空格,不满足y=2x+5的点
}
}
printf(" ");//x轴已经到显示范围,所以需要换行。
}
return0;
}

❷ 谁知道C语言怎么画图啊

Turbo C提供了非常丰富的图形函数, 所有图形函数的原型均在graphics. h中, 本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外, 使用图形函数时要确保有显示器图形驱动程序*BGI, 同时将集成开发环境Options/Linker中的Graphics lib选为on, 只有这样才能保证正确使用图形函数。由于种类比较多,所以下面仅列举2个例子,抛砖引玉→
1.点
void far putpixel(int x, int y, int color);
2.线
void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。

void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。

void far linerel(int dx, int dy); 画一条从现行游标(x, y)到按相对增量确定的点(x+dx, y+dy)的直线。

void far circle(int x, int y, int radius); 以(x, y)为圆心, radius为半径, 画一个圆。

c语言的图形部分是很有意思的,也是c中最精彩的内容之一,希望你能很快享受它的乐趣。

❸ 求一用C语言画直线的程序

不调用画图 API,用C 或 C++ 如何实现画一条线?
Milo Yip:如何开始用 C++ 写一个光栅化渲染器?
我尝试用不同技术实现画直线的方法(完整源代码在 miloyip/line),此文简单介绍个中思路。本文的代码采用 C 语言、标准库及极简的 PNG 编码函数 svpng(),没有使用其他 API。

1. Bresenham 算法
Bresenham直线算法 [1] 是最简单的直线光栅化(rasterization)算法。


Bresenham 直线
如果像上图,直线的高度小于宽度,那么 Bresenham 直线算法会为 轴每个坐标填入一个像素,绘画每个像素时按斜率判断 是否需要调整。整个算法可以避开浮点数运算,只用整数运算实现。以下是一个简单实现:

// Modified from https://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm#C
void bresenham(int x0, int y0, int x1, int y1) {
int dx = abs(x1 - x0), sx = x0 < x1 ? 1 : -1;
int dy = abs(y1 - y0), sy = y0 < y1 ? 1 : -1;
int err = (dx > dy ? dx : -dy) / 2;

while (setpixel(x0, y0), x0 != x1 || y0 != y1) {
int e2 = err;
if (e2 > -dx) { err -= dy; x0 += sx; }
if (e2 < dy) { err += dx; y0 += sy; }
}
}
为了测试不同角度,我做了一个测试用例:

int main() {
memset(img, 255, sizeof(img));
float cx = w * 0.5f - 0.5f, cy = h * 0.5f - 0.5f;
for (int j = 0; j < 5; j++) {
float r1 = fminf(W, H) * (j + 0.5f) * 0.085f;
float r2 = fminf(W, H) * (j + 1.5f) * 0.085f;
float t = j * PI / 64.0f;
for (int i = 1; i <= 64; i++, t += 2.0f * PI / 64.0f) {
float ct = cosf(t), st = sinf(t);
bresenham((int)(cx + r1 * ct), (int)(cy - r1 * st), (int)(cx + r2 * ct), (int)(cy - r2 * st));
}
}
svpng(fopen("line_bresenham.png", "wb"), W, H, img, 0);
}
完整代码 line_bresenham.c

渲染结果及中间局部放大:



2. 采样方法
Bresenham 直线算法有 3 个问题:

不能控制直线宽度;
坐标为整数;
只能对像素写入一个颜色,只用单色会有严重的锯齿效果。
在图形学中,除了以逐个图元(如直线)方式渲染,我们还可以通过对每个像素进行采样(sampling),换句话说,我们可对整个图像逐像素询问:“这个像素的颜色是什么?”

用采样方式画直线时,我们可以用一个具有面积的形状去表示“直线”,例如是长方形。但在本文中,我们使用胶囊体(capsule)去表示直线。这样就能解决上面前两个问题:(1) 可用胶囊体半径设置直线的宽度;(2) 坐标可以为浮点数。不过,用最简单的采样方式,我们需要在每像素查询所有图元是否占有该像素,效率很低。

❹ 如何在VC里面用C语言绘制图形,直线,圆等等。另外头文件<graphics.h>在VC下不能使用,为什么

<graphics.h>是TC下使用的库

建立MFC文件,添加菜单“功能性按键”时选择“CVIEW”
函数内容如下(我用的Visual studio 2010,可能有些版本不同导致操作不同)
CDC*pDC=GetDC();//得到绘图类指针
RedrawWindow();//重建窗口
pDC->Rectangle(50,20,700,400);//以默认画笔画一矩形

CPen bluepen(PS_DASH,1,RGB(0,0,255));//创建画虚线,线宽为1的蓝色画笔
CPen*old=pDC->SelectObject(&bluepen);
pDC->Ellipse(100,50,250,200);//画圆

CPen redpen(PS_SOLID,2,RGB(255,0,0));//创建画实线,线宽为2的红色画笔
pDC->SelectObject(&redpen);
pDC->Ellipse(500,50,650,200);//画圆

pDC->MoveTo(375,100);//画一三角形
pDC->LineTo(225,300);
pDC->LineTo(525,300);
pDC->LineTo(375,100);

CBrush greenBrush(RGB(0,255,0));//创建纯色的绿色画笔刷
pDC->SelectObject(&greenBrush);
pDC->FloodFill(375,200,RGB(255,0,0));//以纯色绿笔刷填充三角形

CBrush green1Brush(HS_FDIAGONAL,RGB(0,255,0));//创建影线为斜线的绿色笔刷
pDC->SelectObject(&green1Brush);
pDC->FloodFill(600,150,RGB(255,0,0));//以绿色斜线笔刷填充圆

pDC->SelectObject(old);//释放创建的画笔,回复原来的画笔

pDC->TextOut(335,250,"HELLO WORLD,It's my first computer graphic work!");//输出字符

ReleaseDC(pDC);//释放创建的CDC对象

❺ C语言实现画图功能

tc/bc在dos下自带图形驱动,可以使用graphics.h 头文件调用标准C函数,如果坚决不用,请使用系统功能调用,自己编写绘图功能,DOS下使用int86()函数实现功能调用。有,你可以参考:

支持SVGA的高分辨率绘图通过调用中断 10h的4f功能来实现

主要分辨率设置代码

unsigned char set_SVGA_mode(int vmode)
{union REGS r;
r.x.ax=0x4f02;
r.x.bx=vmode;
int86(0x10,&r,&r);
return(r.h.ah);
}

void hide_text_cursor(void)
{union REGS r;
r.h.ah=1;
r.h.ch=32;
int86(0x10,&r,&r);
}

void selectpage(register char page)
{union REGS r;
r.x.ax=0x4f05;
r.x.bx=0;
r.x.dx=page;
int86(0x10,&r,&r);
}

void show_text_cursor(char size)
{union REGS r;
r.h.ah=1;
r.h.cl=size;
r.h.ch=7;
int86(0x10,&r,&r);
}

unsigned int get_SVGA_mode()
{union REGS r;
r.x.ax=0x4f03;
int86(0x10,&r,&r);
return(r.x.bx);
}
windows下本来就是图形界面,随便可以画,有关的概念是:Canvas,brush,color等类/参数,DrawLine/DrawArc函数/方法。

❻ 用C语言绘制曲线

楼上的观珠仔很久不见啦(挺挂念那段时光的)!想不到路过此地看到你,这是高科技呀?你还这么老班牙啊,大考小考把你弄糊涂了,高考顺利呀!别忘了我这位老兄了,C语言略懂 ~~~~~~杰
1.绘制余弦曲线
*程序说明与注释
#include<stdio.h>
#include<math.h>
void main()
{
double y;
int x,m;
for(y=1;y>=-1;y-=0.1) /*y为列方向,值从1到-1,步长为0.1*/
{
m=acos(y)*10; /*计算出y对应的弧度m,乘以10为图形放大倍数*/
for(x=1;x<m;x++) printf(" ");
printf("*"); /*控制打印左侧的 * 号*/
for(;x<62-m;x++)printf(" ");
printf("*\n"); /*控制打印同一行中对称的右侧*号*/
}
}
*运行结果

2.绘制正弦曲线

在屏幕上用“*”显示0-360度的余弦函数sin(x)曲线。
1.

/**//*
sin() line.
62 of line width
*/

#include <stdio.h>
#include <math.h>

int main(void)
...{
int j ,k,d,h;
double i ;

for(i=1.0 ; i> 0.0; i-=0.1)
...{
k = (int)(asin(i)*10) ;

for(j=0; j< k ; j++) /**//*print the left */
printf(\" \");
printf(\"*\");
for( ; j< 31-k ; j++)
printf(\" \");

热点内容
javamysql插入 发布:2025-10-15 12:40:43 浏览:66
db2数据库锁表 发布:2025-10-15 12:36:39 浏览:127
androidrom编译 发布:2025-10-15 12:30:40 浏览:458
魔兽世界怎么退出电脑服务器 发布:2025-10-15 12:21:18 浏览:742
我的世界服务器怎么装插件 发布:2025-10-15 12:14:47 浏览:257
算法了摊销 发布:2025-10-15 12:11:02 浏览:43
g5服务器是什么牌子 发布:2025-10-15 12:05:11 浏览:980
钓鱼源码论坛 发布:2025-10-15 11:57:13 浏览:258
linux网卡驱动加载 发布:2025-10-15 11:55:36 浏览:663
我的世界服务器怎么给一个人箱子 发布:2025-10-15 11:53:54 浏览:817