目录
函数图像生成器
1.直角坐标系
2.极坐标系
3.参数方程
a.角度(圆锥曲线)
b.距离(直线)
在学习编程过程中,我们可能会遇见十分复杂的函数,因此我们需要强大的工具来辅助分析。这篇文章我们来深入讨论如何生成各种函数以及曲线方程的图像。
为了清晰简洁,我们采用头文件与源文件相结合的方式编译。
且三类图像生成器,使用同一个头文件辅助生成图像。
头文件:
#ifndef _SLX_H_
#define _SLX_H_
#include<stdio.h>
#include<math.h>
#include<graphics.h>
#include<stdlib.h>
extern double p;//引用源文件中的外部变量(放大倍数)
/*说明 我们需要将原函数等比例放缩呈现在电脑频幕上,经测试 50是一个适中的放缩倍数*/
void xian(void)
{
/*平面直角坐标系*/
line(500, 0, 500, 1000);//纵轴
line(0, 500, 1000, 500);//横轴
line(500, 0, 480, 20);//纵轴箭头
line(500, 0, 520, 20);
line(1000, 500, 980, 480);//横轴箭头
line(1000, 500, 980, 520);
outtextxy(970, 520, 'x');
outtextxy(470, 20, 'y');
int i = -100;
double j;//中间变量
/*以下代码用于显示数轴数字*/
for (; i <= 100; i++)
{
j = i * p;
char a[10];
sprintf_s(a, "%d", i);
line(j + 500, 500, j + 500, 490);
if (i == 0)
{
;
}
else
{
outtextxy(j + 500, 510, a);
}
}
i = -100;
for (; i <= 100; i++)
{
double j = i * p;
char b[10];
sprintf_s(b, "%d", i);
line(500,500-j,510,500-j);
if (i == 0)
{
;
}
else
{
outtextxy(510, 500 - j, b);
}
}
}
#endif
1.直角坐标系
以下操作均在直角坐标系下进行
#include<stdio.h>
#include<math.h>
#include<graphics.h>//画图函数头文件
#include<stdlib.h>
#include"slx.h"//自己的头文件
double p = 50;//图像放大倍数(50为宜)
int main(void)
{
initgraph(1000, 1000);//画图窗口
setcolor(GREEN);//线颜色
xian();//显示平面直角坐标系
double x, y;//正常坐标系下 x y
double m, n;//定义域
double a, b;//放大后的x y
printf("请输入定义域的左右端点值:\n");
scanf_s("%lf %lf", &m, &n);
m = m * p;//定义域扩大
n = n * p;
if (m >= n)//防止错误输入
{
printf("ERROR");
return 0;
}
float i = m;
float e =exp(-6);//移位变量
for (; i <= n; i=i+e)
{
x = i;
a = x;//存贮x的值
x = x / p;//放缩
y =(exp(x)-exp(-x))/2; //函数 以双曲正弦为例
b = y * p;//放缩
setlinestyle(PS_SOLID,3);//设置画线样式 实线 宽度为三个像素
line(500 + a, 500 - b, 500 + a, 500 - b);//化线打点
}
system("pause");
closegraph();
return 0;
}
若定义域出现错误,会出现如下结果。
若正确 以[-10,10] 为例
会正确显示函数图像,以下是双曲正弦图像,函数可以在代码中修改,我们输入定义域端点值。
f(x)=(exp(x)-exp(-x))/2 定义域[-10,10]
f(x)=(0.64 * sqrt(fabs(x)) - 0.8 + pow(1.2,fabs(x)) * cos(200 * x)) * sqrt(cos(x))
定义域[-pi/2,pi/2]
2.极坐标系
我们更改头文件
#ifndef _SLX_H_
#define _SLX_H_
#include<stdio.h>
#include<math.h>
#include<graphics.h>
#include<stdlib.h>
extern double p;
void xian(void)
{
/*极坐标系*/
line(500, 500, 1000, 500);//横轴
line(1000, 500, 980, 480);//横轴箭头
line(1000, 500, 980, 520);
outtextxy(970, 520, 'x');
int i =0;
double j;//中间变量
/*以下代码用于显示数轴数字*/
for (; i <= 100; i++)
{
j = i * p;
char a[10];
sprintf_s(a, "%d", i);
line(j + 500, 500, j + 500, 490);
outtextxy(j + 500, 510, a);
}
}
#endif
源文件
#include<stdio.h>
#include<math.h>
#include<graphics.h>//画图函数头文件
#include<stdlib.h>
#include"slx.h"//自己的头文件
double p = 50;//图像放大倍数(50为宜)
int main(void)
{
initgraph(1000, 1000);//画图窗口
setcolor(GREEN);//线颜色
xian();//显示平面直角坐标系
double rou, xite;
double x, y;
double k;
printf("请输入[0,k*pi]中的k\n");
scanf_s("%lf", &k);
double m=0, n=k*3.1415926;
float i = m;
float e = exp(-6);//移位变量
for (; i <= n; i = i + e)
{
xite = i;
rou =0.1*xite; //极坐标方程
rou = rou * p;
x = rou * cos(xite);
y = rou * sin(xite);
setlinestyle(PS_SOLID, 3);//设置画线样式 实线 宽度为三个像素
line(500 + x, 500 - y, 500 + x, 500 - y);//化线打点
}
system("pause");
closegraph();
return 0;
}
以螺旋线为例(函数可在代码中更改)
我们输入k为30
图像如下
3.参数方程(直角坐标系下)
我们改回原来的头文件
#ifndef _SLX_H_
#define _SLX_H_
#include<stdio.h>
#include<math.h>
#include<graphics.h>
#include<stdlib.h>
extern double p;
void xian(void)
{
line(500, 0, 500, 1000);//平面直角坐标系
line(0, 500, 1000, 500);
line(500, 0, 480, 20);
line(500, 0, 520, 20);
line(1000, 500, 980, 480);
line(1000, 500, 980, 520);
outtextxy(480, 520, 'o');
outtextxy(970, 520, 'x');
outtextxy(470, 20, 'y');
int i = -100;
double j;
for (; i <= 100; i++)
{
j = i * p;
char a[10];
sprintf_s(a, "%d", i);
line(j + 500, 500, j + 500, 490);
if (i == 0)
{
;
}
else
{
outtextxy(j + 500, 510, a);
}
}
i = -100;
for (; i <= 100; i++)
{
double j = i * p;
char b[10];
sprintf_s(b, "%d", i);
line(500,500-j,510,500-j);
if (i == 0)
{
;
}
else
{
outtextxy(510, 500 - j, b);
}
}
}
#endif
a.角度
#include<stdio.h>
#include<math.h>
#include<graphics.h>//画图函数头文件
#include<stdlib.h>
#include"slx.h"//自己的头文件
double p = 50;//图像放大倍数(50为宜)
int main(void)
{
initgraph(1000, 1000);//画图窗口
setcolor(GREEN);//线颜色
xian();//显示平面直角坐标系
double x, y;
double xite;
double k;
printf("请输入[0,k*pi]中的k\n");
scanf_s("%lf", &k);
double m = 0, n = k * 3.1415926;
float i = m;
float e = exp(-6);//移位变量
for (; i <= n; i = i + e)
{
xite = i;
x = 4*cos(xite);//参数方程
y = 3*sin(xite);
x = x * p;
y = y * p;
setlinestyle(PS_SOLID, 3);//设置画线样式 实线 宽度为三个像素
line(500 + x, 500 - y, 500 + x, 500 - y);//化线打点
}
system("pause");
closegraph();
return 0;
}
以椭圆x*x/16+y*y/9=1为例
输入2 图形如下
函数可在代码中更改
b.距离 t
#include<stdio.h>
#include<math.h>
#include<graphics.h>//画图函数头文件
#include<stdlib.h>
#include"slx.h"//自己的头文件
double p = 50;//图像放大倍数(50为宜)
int main(void)
{
initgraph(1000, 1000);//画图窗口
setcolor(GREEN);//线颜色
xian();//显示平面直角坐标系
double x, y;
double x1, y1;
double xite;
printf("请输入线过点以及偏转角k*pi中的k以及定义域的左右端点:\n");
scanf_s("%lf %lf", &x1, &y1);
scanf_s("%lf", &xite);
double t;
double m , n ;
scanf_s("%lf %lf", &m, &n);
float i = m;
float e = exp(-6);//移位变量
for (; i <= n; i = i + e)
{
t = i;
x = x1+t*cos(xite*3.1415926);
y = y1 + t*sin(xite*3.1415926);
x = x * p;
y = y * p;
setlinestyle(PS_SOLID, 3);//设置画线样式 实线 宽度为三个像素
line(500 + x, 500 - y, 500 + x, 500 - y);//化线打点
}
system("pause");
closegraph();
return 0;
}
例如 输入 2 1 0.25 -100 100
显示如下
总结:以上就是函数图像生成器的简述,读者可以自由更改代码中的数据来达到自己的需求,希望以上的内容对你的生活和学习有所帮助。文章来源:https://www.toymoban.com/news/detail-455657.html
文章来源地址https://www.toymoban.com/news/detail-455657.html
到了这里,关于函数图像生成器 (吉林大学 孙立鑫)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!