重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
c语言本身是无法调整的,但是如果为了使用原点为左下角的坐标系完全可以用坐标变
成都创新互联专注于澄迈企业网站建设,成都响应式网站建设公司,电子商务商城网站建设。澄迈网站建设公司,为澄迈等地区提供建站服务。全流程按需网站建设,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
换实现,你只需要自己写一个自己的直线函数,即参数为以左下角为原点的直线的端点
的直线函数。并在函数中作一次坐标变换就可以了,举个例子:
#include graphics.h
#include stdlib.h
#include stdio.h
#include conio.h
/*直线函数*/
void myline(int x1, int y1, int x2, int y2)
{
int ymax = getmaxy(); /*获得屏幕最低点的y坐标*/
y1 = ymax - y1; /*坐标变换*/
y2 = ymax - y2;
line(x1, y1, x2, y2);
}
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int xmax, ymax;
/* initialize graphics and local variables */
initgraph(gdriver, gmode, "h:\\work\\tc3\\bgi");
/* read result of initialization */
errorcode = graphresult();
/* an error occurred */
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
setcolor(getmaxcolor());
xmax = getmaxx();
ymax = getmaxy();
/* 这是原来的直线函数*/
line(0, 0, xmax, ymax);
/* 这是变换后的直线函数*/
myline(0,0,xmax,ymax);
/* clean up */
getch();
closegraph();
return 0;
}
不过不推荐使用这种方法,其实,坐标原点在哪里都是一样的,用习惯就好了。
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(gd, gm, "");
}
void DrawCoord();
void Drawstg();
void Drawcurve();
int main(void)
{
initgr(); /* BGI初始化 */
DrawCoord();
Drawstg();
Drawcurve();
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}
void DrawCoord() /*画坐标系*/
{
line(50,40,50,400); /*y轴*/
line(50,400,600,400); /*x轴*/
line(50,40,45,50); /*箭头*/
line(50,40,55,50);
line(600,400,590,395);
line(600,400,590,405);
outtextxy(35,45,"y");
outtextxy(590,410,"x");
outtextxy(40,410,"O");
}
void Drawstg() /*画标尺*/
{
int x,y,i;
x=50,y=400;
for(i=0;i17;i++)
{
line(x+5,y,x,y);
y-=20;
}
x=50,y=400;
for(i=0;i26;i++)
{
line(x,y-5,x,y);
x+=20;
}
}
void Drawcurve()/*画图示例*/
{
line(50,400,500,400-250);
}
此题把数学问题转化为用C语言描述即可,很多画图问题可以使用这种方法。
假设屏幕左上角为坐标轴原点
也就是把我们的屏幕当作第一象限时,代码如下
#include stdio.h
#define MAX 30 // 选定曲线要显示的范围,因为一次函数是一条直线,所以它的显示范围无穷
int main()
{
int x, y;
for (y = 0; y MAX; y++) // 因为我们的光标是向下,向右增长。这里设定y为纵坐标
{
for (x = 0; x MAX; x++)
{
if (y == 2 * x + 5)
{
printf("*");
}
else
{
printf(" "); // 空格,不满足y=2x+5的点
}
}
printf("\n"); // x轴已经到显示范围,所以需要换行。
}
return 0;
}
2. 更换坐标轴原点显示
#include stdio.h
#define MAX 30 // 选定曲线要显示的范围,因为一次函数是一条直线,所以它的显示范围无穷
int main()
{
int x, 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("\n"); // x轴已经到显示范围,所以需要换行。
}
return 0;
}