重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
挺有意思的問題,簡單談一下看法
我們提供的服務有:網站設計制作、成都做網站、微信公眾號開發、網站優化、網站認證、達坂城ssl等。為成百上千企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的達坂城網站制作公司
將你的需求分成兩部分,一是讓程序自行解析用戶輸入的函數解析式,二是繪制函數圖像。
首先,關于第一個功能,最直接的思路就是字符串解析,按照數學知識定義不同的運算符號,按照使用習慣定義常用的變量和常量的符號字母,然后據此規則解析輸入的字符串,再根據解析結果確定函數中基本運算的次數及運算順序,最后將整個操作流程以一定形式存儲起來即可。
例如,對于y=log(x^2+x),包含三次基本運算,第一步是x^2,第二步是上一步的結果+x,第三步是上一步的結果求對數。注意到log有定義域的限制,這也是要在程序中實現的。
然后,對于第二個功能,根據給定函數繪制圖像并不難,對于一元和二元函數來說很容易實現,難點在于多元函數應如何繪制直觀易懂的函數圖像?不過這一點超出編程語言的范疇了,而且二元函數可以滿足大部分應用場景了。
繪制函數圖像的程序只需在定義域上按指定的步長求出不同自變量對應的函數值,然后將點連成線,即可繪制出函數圖像。例如對于logx,定義域為x0。假設步長為0.1,則可求出0.1,0.2,0.3,...,99.9,100.0的函數值,然后繪制出點,再連點成線,即可得到函數圖像。
另外,這里還有很多細節沒有討論,例如輸入數據是字符串還是圖像;是否可以用其他方法解析輸入,例如神經網絡。這些就很復雜了,不再深入。
回答中可能有考慮不周的地方,希望上述內容對你有參考意義
我畫了半個正弦函數,其余的你可以照著畫,歡迎討論,
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "graphics.h"
void main()
{
int driver,mode,i;
driver=DETECT;
mode=0;
initgraph(driver,mode,"");
setcolor(15);
for(i=0;i360;i++)
line(i,200*sin(i*3.14/360),i+1,200*sin((i+1)*3.14/360));
getch();
restorecrtmode();
}
用GDI繪圖吧,比較簡單。繪圖的思想是讓x以固定的值在區間內持續增長,比如x=0.1,0.2,0.3.....,以計算出的y值來確定y坐標。用線連接所有的點就行了。MoveTo(),LineTo()函數你用得著,具體情況請自行查看MSDN。
這樣說吧,n是最高次方,A是次方前面的倍數。如果n(最高次)是偶數,并且An(最高項系數)0,那么圖像左邊下降,右邊上升;
如果n是偶數且An0, 那么圖像左邊上升,右邊下降
如果n是奇數且An0, 那么圖像從左到右都上升
如果n是奇數且An0, 那么圖像從左到右都下降。
還要注意圖像從右往左看,奇穿偶不穿,符號看象限。我也正在找攻略呢,所以自己也不大明白,不知道能不能幫到你……
多項式,比如:f(x)
=
p(x)
=
x^3
+
x^2
+
x
+
1
畫圖:可以取x為一序列,得到對應的f(x)然后描點繪圖即可
你要什么圖像 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");
}
}