当前位置:首页 » 编程语言 » c语言line

c语言line

发布时间: 2022-03-07 23:00:20

1. c语言中line画五角星程序,是线条连成的

用C语言画圆可以通过编译程序的方法实现。
程序源代码:
#include "stdio.h"
#include "graphics.h"
#include "conio.h"
main()
{
int driver=VGA,mode=VGAHI;
int i,num=15,top=50;
int left=20,right=50;
initgraph(&driver,&mode,"");
for(i=0;i<num;i++)
{
ellipse(250,250,0,360,right,left);
ellipse(250,250,0,360,20,top);
rectangle(20-2*i,20-2*i,10*(i+2),10*(i+2));
right+=5;
left+=5;
top+=10;
}
getch();
}

2. c语言中的#line 是从哪里开始的

#line所在行的下一行

3. C语言__FILE__,__LINE__,__FUNCTION__三个宏连起来怎么做

无法简单的连成字符串。

一般采用宏函数方式输出

比如

#definedebug(fmt,args...)printf("[%s:%s:%d]"fmt,__FILE__,__FUNCTION__,__LINE__,##args)

4. c语言中line函数内的参数的含义

line(x1,y1,x2,y2);其中两个数为一个坐标,表示从(x1,y1)画线到(x2,y2)

5. 求一用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) 坐标可以为浮点数。不过,用最简单的采样方式,我们需要在每像素查询所有图元是否占有该像素,效率很低。

6. c语言中的#line是什么意思

#line 的作用是改变当前行数和文件名称,它们是在编译程序中预先定义的标识符命令。
#line number["filename"]
这是一个冷门的预处理命令,很少使用。不过他还是有点用的,那就是用在编译器的编写中,我们知道编译器对C 源码编译过程中会产生一些中间文件,通过这条指令,可以保证文件名是固定的,不会被这些中间文件代替,有利于进行分析。

7. c语言中如何用line画一个圆

#include <math.h>
#include <graphics.h> /*预定义库函数*/
void circlePoint(int x,int y) /*八分法画圆程序*/
{
circle(320+x*20,240+y*20,3);
circle(320+y*20,240+x*20,3);
circle(320-y*20,240+x*20,3);
circle(320-x*20,240+y*20,3);
circle(320-x*20,240+y*20,3);
circle(320-x*20,240-y*20,3);
circle(320-y*20,240-x*20,3);
circle(320+y*20,240-x*20,3);
circle(320+x*20,240-y*20,3);
}
void MidBresenhamcircle(int r) /* 中点Bresenham算法画圆的程序 */
{
int x,y,d;
x=0;y=r;d=1-r; /* 计算初始值 */
while(x<y)
{ circlePoint(x,y); /* 绘制点(x,y)及其在八分圆中的另外7个对称点 */
if(d<0) d+=2*x+3; /* 根据误差项d的判断,决定非最大位移方向上是走还是不走 */
else
{ d+=2*(x-y)+5;
y--;
}
x++;
delay(900000);
} /* while */
}
main()
{
int i,j,r,graphmode,graphdriver;
detectgraph(&graphdriver,&graphmode); initgraph(&graphdriver,&graphmode," ");
printf("中点Bresenhamcircle算法画圆的程序\n"); /*提示信息*/
printf("注意 |r|<=11");
printf("\n输入半径值 r:");
scanf("%d",&r);
printf("按任意键显示图形...");
getch(); cleardevice(); setbkcolor(BLACK);
for(i=20;i<=620;i+=20) /*使用双循环画点函数画出表格中的纵坐标*/
for(j=20;j<=460;j++)
putpixel(i,j,2);
for(j=20;j<=460;j+=20) &n欢迎光临学网,收藏本篇文章 [1] [2]

$False$

bsp; /*使用双循环画点函数画出表格中的横坐标*/
for(i=20;i<=620;i++)
putpixel(i,j,2); outtextxy(320,245,"0"); /*原点坐标*/
outtextxy(320-5*20,245,"-5");circle(320-5*20,240,2); /*横坐标值*/
outtextxy(320+5*20,245,"5");circle(320+5*20,240,2);
outtextxy(320-10*20,245,"-10");circle(320-10*20,240,2);
outtextxy(320+10*20,245,"10");circle(320+10*20,240,2);
outtextxy(320-15*20,245,"-15");circle(320-15*20,240,2);
outtextxy(320+15*20,245,"15");circle(320+15*20,240,2);
outtextxy(320,240-5*20,"-5");circle(320,240-5*20,2); /*纵坐标值*/
outtextxy(320,240+5*20,"5");circle(320,240+5*20,2);
outtextxy(320,240-10*20,"-10");circle(320,240-10*20,2);
outtextxy(320,240+10*20,"10");circle(320,240+10*20,2);
outtextxy(20,10,"The center of the circle is (0,0) "); /*坐标轴左上角显示提示信息*/
setcolor(RED); /*标记坐标轴*/
line(20,240,620,240); outtextxy(320+15*20,230,"X");
line(320,20,320,460); outtextxy(330,20,"Y");
setcolor(YELLOW);
MidBresenhamcircle(r);
setcolor(BLUE); /*绘制圆*/
circle(320,240,r*20);
setcolor(2);
getch(); closegraph();
}

8. C语言中setlinestyle(0,0,1)中的三个数字是怎么确定的

函数名: setlinestyle
功 能: 设置当前画线宽度和类型。
用 法: void far setlinestyle(int linestyle, unsigned pattern,int width);
linestyle为整数型,用来定义所画直线类型。
pattern为无符号整数型,该参数在需要用户自定义线型时使用 ,如果是使用系统预定义的线型则参数取0值 。
width为整数型,用来指定所画直线的粗细

linestyle是线条样式。可选如下值:
数值 英文说明 中文说明
0 SOLID_LINE 实心线
1 DOTTED_LINE 点线
2 CENTER_LINE 中心线
3 DASHED_LINE 断续线
4 USERBIT_LINE 用户自定义线

pattern和USERBIT_LINE配合使用。以16位数值代表线条,一位代表一点。
width:线条的宽度,可选值1(NORM_WIDTH)和3(THICK_WIDTH)。

热点内容
linux设置python环境变量 发布:2025-07-20 17:22:49 浏览:242
柱底层加密区 发布:2025-07-20 17:16:20 浏览:913
安卓ids是什么文件 发布:2025-07-20 17:16:14 浏览:668
php修改数据库密码 发布:2025-07-20 17:11:36 浏览:72
centosxz解压 发布:2025-07-20 17:08:29 浏览:547
教育平台在哪里可以修改密码 发布:2025-07-20 17:06:15 浏览:169
名爵锐腾怎么配置 发布:2025-07-20 17:04:48 浏览:900
车载安卓桌面主题软件哪个好 发布:2025-07-20 17:03:47 浏览:136
怎么破解安卓手机游戏 发布:2025-07-20 17:02:30 浏览:122
centos远程数据库连接 发布:2025-07-20 17:02:21 浏览:410