十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
挺有意思的问题,简单谈一下看法
成都创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、网站建设、高淳网络推广、重庆小程序开发公司、高淳网络营销、高淳企业策划、高淳品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联为所有大学生创业者提供高淳建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
将你的需求分成两部分,一是让程序自行解析用户输入的函数解析式,二是绘制函数图像。
首先,关于第一个功能,最直接的思路就是字符串解析,按照数学知识定义不同的运算符号,按照使用习惯定义常用的变量和常量的符号字母,然后据此规则解析输入的字符串,再根据解析结果确定函数中基本运算的次数及运算顺序,最后将整个操作流程以一定形式存储起来即可。
例如,对于y=log(x^2+x),包含三次基本运算,第一步是x^2,第二步是上一步的结果+x,第三步是上一步的结果求对数。注意到log有定义域的限制,这也是要在程序中实现的。
然后,对于第二个功能,根据给定函数绘制图像并不难,对于一元和二元函数来说很容易实现,难点在于多元函数应如何绘制直观易懂的函数图像?不过这一点超出编程语言的范畴了,而且二元函数可以满足大部分应用场景了。
绘制函数图像的程序只需在定义域上按指定的步长求出不同自变量对应的函数值,然后将点连成线,即可绘制出函数图像。例如对于logx,定义域为x0。假设步长为0.1,则可求出0.1,0.2,0.3,...,99.9,100.0的函数值,然后绘制出点,再连点成线,即可得到函数图像。
另外,这里还有很多细节没有讨论,例如输入数据是字符串还是图像;是否可以用其他方法解析输入,例如神经网络。这些就很复杂了,不再深入。
回答中可能有考虑不周的地方,希望上述内容对你有参考意义
你要什么图像 sin 还cos 要不我都给你把!
1、#includestdio.h
#includemath.h
void main()
{
double y;
int i,n;
for(y=1;y=0;y-=0.1)
{n=asin(y)*10;
for(i=1;i=n;i++)
printf(" ");
printf("*");
for(;i=31-n;i++)
printf(" ");
printf("*\n");}
for(y=0;y=1;y+=0.1)
{n=asin(y)*10;
for(i=-1;i=31+n;i++)
printf(" ");
printf("*");
for(;i=62-n;i++)
printf(" ");
printf("*\n");}
}
2、#includestdio.h
#includemath.h
void main()
{
double y;
int x,m;
for(y=1;y=-1;y-=0.1)
{m=acos(y)*10;
for(x=1;xm;x++)
printf(" ");
printf("*");
for(;x62-m;x++)
printf(" ");
printf("*\n");}
}
之后在给你个连个图像相交的把
3、#includestdio.h
#includemath.h
void main()
{
double y;
int n,m,i,j,x,yy;
for(yy=0;yy=20;yy++)
{ y=0.1*yy;
m=acos(1-y)*10;
n=asin(1-y)*10;
i=32+asin(y-1)*10;
j=61-asin(y-1)*10;
for(x=0;x62;x++)
{if((x==n)(x==m)) printf("+");
else if((x==n)||(x==i)||(x==j)) printf("+");
else if((x==m)||(x==62-m)) printf("*");
else printf(" ");}
printf("\n");
}
}
# include "graphics.h"
# include "math.h"
# define N 100
void init_graphic( )
main()
{
int i;
float x0,y0,x,y;
float x[100],y[100];
init_graphic();
for(i=0;i100;i++)
{
x[i]=-20+(40/100)*i;
y[i]=x[i]*x[i];
}
x0=x[0]+320;
y0=440-y[0];
for(i=1;i100;i++)
{
x1=x[i]+320;
y1=440-y[i];
line(x0,y0,x1,y1);
x0=x1;
y0=y1;
}
}
void init_graphic( )
{
int graphicdriver,graphicmode;
graphicdriver=DETECT;
graphicmode=1;
initgraph(graphicdriver,graphicmode,"E:\\turboc2\\")/*该路径是你TurboC的路径*/
}
在c的标准库中有graphic.h头文件,实现了很多画图函数 比如 lineto, moveto, arc,(函数名可能记错,好久没用了-.-!)
直线:起点加终点就行。
二次曲线,比如抛物线,那就以定长拆分成小直线。双曲线同理。
抛物线,和双曲线用定长拆分,估计很难计算。要是精度要求不高就根据情况改成定x,或者定y偏移的拆分,要是精度要求高那就去找直线拟合曲线的算法或者双圆弧拟合曲线的算法。