winform繪製基本初等函數圖像系列02:具體操作

2020-12-06 熱愛生活的小龍蝦

回顧:上一篇文章介紹了winform繪製基本初等函數的類和工具,本次將一點點地介紹如何繪製函數圖像。

最後會貼出特別棒的圖像效果。

變量定義好了之後,我們就開始操作。

首先在窗體的加載事件中進行前期初始化

private void Form1_Load(object sender, EventArgs e)

{

//獲得窗體中心點作為坐標系中心

beginPointX = (this.Width / 2);

beginPointY = (this.Height / 2);

//創建畫板

gra = this.CreateGraphics();

//初始化坐標系

zuobiaoxi();

}

初始化坐標系函數:

private void zuobiaoxi()

{

try

{

//從文本框中獲得坐標系精度參數

KEDU = Convert.ToInt32(textBox1.Text.Trim());

//從文本框中獲得曲線精度

LINEJD = Convert.ToDouble(textBox2.Text.Trim());

//從文本框中獲得曲線寬度

PointSize = Convert.ToInt32(textBox3.Text.Trim());

}

catch

{

}

Inittools();//畫板、畫筆工具初始化

//初始化X軸

InitX(new Point(0, beginPointY), new Point(this.Width, beginPointY));

//初始化Y軸

InitY(new Point(beginPointX, 0), new Point(beginPointX, this.Height));

}

畫板、畫筆初始化函數

private void Inittools()

{

//用指定的顏色清除畫板上的內容

gra.Clear(Color.FromArgb(253,241,219));

//指定繪製模式 消除鋸齒

gra.SmoothingMode = SmoothingMode.AntiAlias;

//創建畫筆對象

pen = new Pen(Color.Green);

//指定畫筆的寬度

pen.Width = KEDU/20;

}

初始化X軸函數:

private void InitX(Point a,Point b)

{

gra.DrawLine(pen, a, b);

a.Y = beginPointY;

b.Y = beginPointY - KEDU/4;

for (int i = 0; i < (this.Width / 2)/this.KEDU; i++)

{

a.X = beginPointX - this.KEDU*i;

b.X = beginPointX - this.KEDU*i;

gra.DrawLine(pen, a, b);

a.X = beginPointX + this.KEDU * i;

b.X = beginPointX + this.KEDU * i;

gra.DrawLine(pen, a, b);

}

}

初始化Y軸函數:

private void InitY(Point a, Point b)

{

gra.DrawLine(pen, a, b);

a.X = beginPointX;

b.X = beginPointX + KEDU/4;

for (int i = 0; i < (this.Height / 2) / this.KEDU; i++)

{

a.Y = beginPointY - this.KEDU * i;

b.Y = beginPointY - this.KEDU * i;

gra.DrawLine(pen, a, b);

a.Y = beginPointY + this.KEDU * i;

b.Y = beginPointY + this.KEDU * i;

gra.DrawLine(pen, a, b);

}

}

這個時候,窗體加載完坐標系就搭建好了。界面如下圖所示。

搭建好的坐標系

接下來是繪製各個函數了。

繪製正弦函數:

private void button1_Click(object sender, EventArgs e)

{

if(flag == 1)

{

sign = 1;

new Thread(huizhi).Start();

}

}

所有的函數封裝代碼都放在「huizhi」函數中了。

繪製圖像的函數:

private void huizhi()

{

try

{

flag = 0;

zeroX = beginPointX;

zeroY = beginPointY;

Random r = new Random();

pen.Color = Color.FromArgb(r.Next(0,255), r.Next(0,255), r.Next(0,255));

realX = -Width;

while (realX < Width)

{

switch (sign)

{

//每一個case就是一種函數圖像

case 1:

realY = Math.Sin(realX / KEDU) * KEDU;

break;

case 2:

realY = Math.Asin(realX / KEDU) * KEDU;

break;

case 3:

realY = Math.Cos(realX / KEDU) * KEDU;

break;

case 4:

realY = Math.Acos(realX / KEDU) * KEDU;

break;

case 5:

realY = Math.Tan(realX / KEDU) * KEDU;

break;

case 6:

realY = Math.Atan(realX / KEDU) * KEDU;

break;

case 7:

realY = (Math.Cos(realX / KEDU) * KEDU) / (Math.Sin(realX / KEDU));

break;

case 8:

realY = (Math.PI / 2) * KEDU - (Math.Atan(realX / KEDU) * KEDU);

break;

case 9:

realY = (1 * KEDU) / (Math.Cos(realX / KEDU));

break;

case 10:

realY = (1 * KEDU) / (Math.Sin(realX / KEDU));

break;

case 11:

realY = realX * realX / KEDU;

break;

case 12:

realY = (realX * realX * realX) / (KEDU * KEDU);

break;

case 13:

realY = 1 * KEDU * KEDU / realX;

break;

case 14:

realY = Math.Log(realX / KEDU) * KEDU;

break;

case 15:

realY = realX;

break;

}

try

{

//畫指定矩形的內切圓 其實函數圖像就是由一個個小圓點組成的

gra.FillEllipse(pen.Brush, (float)(zeroX + realX - 1), (float)(zeroY - realY - 1), PointSize, PointSize);

}

catch

{

}

//按照刻度從左至右依次繪製

realX = realX + LINEJD;

}

flag = 1;

}

catch

{

}

}

好了,寫完了這些就大功告成了。其實最關鍵的部分就是每一個圖像的X點和Y點的位置,選定了X、Y的值,然後在那個位置畫個圓點就行了。

介紹一下參數:坐標軸精度就是每個刻度多長,就像放大縮小圖像一樣。曲線精度就是繪製出的線條的細緻程度,越小越好,但是小就繪製的慢。如果設置為0.01就特別慢,可以試試挺好玩的。曲線寬度就是繪製出的線條寬度。

前臺在繪製的時候會卡死,所以用了多線程,一次只能繪製一種圖像,但是可以覆蓋繪製。

還有就是畫的函數多了要點擊「初始化」按鈕清屏。

下面貼出一些效果,特別棒,而且根據不同的參數還有意想不到的圖像。

正弦、餘弦函數
正切、餘切函數
正割、餘割函數
指數函數、對數函數

將坐標軸精度變得很小的時候,繪製正割、餘割函數會出現很漂亮的另外的曲線,它們上方的點陣又組成了另外的函數。

坐標軸精度很小時正割函數圖像

好了,今天就到這裡,想要源碼的同學可以關注私信我。我會第一時間回復。

相關焦點

  • winform繪製基本初等函數圖像系列01:前期準備
    C# winform中有繪圖的函數,所以想到做一個繪製基本初等函數圖像的小程序,既學習了編程,又對函數有了更深的了解。應該是C#(圖沒找到嘿嘿)學習高等數學的時候,對基本初等函數有些生疏,而且高中時也沒學過反函數,所以只好自學了一段時間
  • 基本初等函數 指數函數 代碼篇
    本文首發於微信公眾號:"算法與編程之美",歡迎關注,及時了解更多此系列博客。由於機器學習和數學密切相關,尤其是數學中的函數,因此我們非常有必要複習和了解基本的函數知識。上一篇文章中,我們為大家介紹了基本初等函數中的指數函數 基本初等函數 指數函數,本文將為大家介紹如何利用python語言完成函數的繪製。
  • 高中數學公式大全:函數、基本初等函數的圖像與性質
    高中數學公式大全:函數、基本初等函數的圖像與性質 2019-02-15 15:24 來源:新東方網編輯整理 作者:
  • 一起來討論特殊函數、三角函數誘導公式、基本初等函數圖像的性質
    大家好,我是專升本數學學霸,這次我們繼續來討論分段函數、三角函數誘導公式、基本初等函數圖像的性質。那你知道分段函數、三角函數誘導公式、基本初等函數圖像的性質嗎?學霸來幫你來了。首先,我們來看看幾個特殊函數。
  • 高一數學必修1基本初等函數解題技巧
    高一數學必修1基本初等函數解題技巧整個高中的數學都是圍繞函數進行考察的,而函數都是圍繞基本初等函數進行相關的變形進行相關的考察的,所以必須從基本初等函數下手,來解決函數中的相關問題,找到突破口,掌握考點
  • 高中數學,關於基本初等函數的零點問題
    到了高中,學習函數知識的時候,同學們都感覺難,其實,只要概念清晰,會畫函數圖像,也不是很難的,所有問題都可以簡單化。今天,所涉及的函數零點問題,我大概的總結一下。函數的零點,就是指使函數值為0的自變量的值。
  • 專升本考試最重要的知識點:6大類基本初等函數
    常用的六類函數,即常數函數、冪函數、指數函數、對數函數、三角函數與反三角函數,這六類函數稱為基本初等函數。一、常數函數y = c 或 f ( x ) = c , x ∈ R ,其中 c 是常數。它的圖像是通過點 (0,c),且平行 x 軸的直線,如下圖所示:常數函數的圖像常數函數的性質:1、常數函數是有界函數,周期函數(沒有最小的正周期)、偶函數;2、常數函數既是單調增加函數又是單調減少函數,特別的當 c = 0 時,它還是奇函數
  • 連續函數的運算與初等函數的連續性
    (複合函數的連續性)若函數f在點x0處連續,g在u0處連續,u0=f(x0),則複合函數g[f(x)]在點x0處連續,即連續函數的複合函數仍然連續。說 明:1、根據連續性的定義,上述結論可以表示為:2、若複合函數g[f(x)]的內函數f當
  • (乾貨、精品)高中數學基礎知識之函數概念與基本初等函數
    今天與大家分享高中數學基礎知識——函數概念與基本初等函數。例2:已知函數y=f(1-x)的圖像經過點(-1,1),則函數y=f(4+x)的反函數必過點___。故y=f(4+x)的圖像必過點(-2,1),其反函數圖像必過點(1,-2)。②兩函數互為反函數兩函數的圖像關於直線y=x對稱。
  • 人教A版高中數學必修1第二章《基本初等函數(I)》思維導圖
    本文我們就以人教版A版必修1高一數學《第二章 基本初等函數(1)》為例進行梳理總結。總體內容大綱如下。高中數學必修一第二章基本初等函數1一、 指數函數高中數學《指數函數》思維導圖指數函數這節,重點在指數運算法則、指數函數的圖像性質、指數式大小比較,高考中一般以選擇題或填空題的形式出現。
  • 高考數學中的幾類非基本初等函數總結
    函數章節是高考數學的重要組成部分。它有著」三最」之稱。即:最基礎、最重要、最難學。曾經我的高中數學老師毫不保留地說「高中數學得函數者得天下」,函數學好了,你的高中數學成功了一半。不管是不是過於誇張,但也足以說明函數的重要性。
  • 教學研討|1.2.2 基本初等函數的導數公式及導數的運算法則
    六、教學過程:研討素材二一、教學目標1.熟練掌握基本初等函數的導數公式;2.掌握導數的四則運算法則。3.能利用給出的基本初等函數的導數公式和導數的四則運算求簡單函數的導學。4.能運用公式處理某些實際問題。
  • 高考必考內容乾貨,函數基本知識點穿線大全,仔細閱讀絕對是飛躍
    05基本初等函數為什麼要研究基本初等函數?這些基本初等函數是所有函數組成部分,相當於組成我們身體中的元素。例如,函數y=㏒(3x+1)(以2為底)的圖像是什麼?就可以從基本初等函數中去獲得。即函數y=㏒(3x+1)(以2為底)是在函數y=㏒x(以2為底)基礎上來獲得。
  • 超越函數的圖像與性質1
    [常見超越函數的形式]指數函數ex、對數函數lnx以及冪函數xn是基本初等函數,它們兩兩組合,可以構成下列六大類超越函數:[形如ex/xn的函數]先討論n=1時的情形,即令當n=2時,函數的圖像如圖所示,虛線為導函數的圖像。
  • 怎麼使用origin繪製雙y軸?繪製的具體操作
    Origin是一款非常棒的繪圖軟體,可以輕鬆繪製雙y軸,還不會的小夥伴下面就來看看使用origin繪製雙y軸的具體操作吧。選擇數據表,當選擇區域的數據變黑是,單擊左下方的畫圖按鈕,繪製圖形。圖形繪製完成後,在「Graph」選擇「new layer」選項中的「link right Y」,建立一個新的Y軸圖層。
  • 高中必考函數圖像,手繪思維導圖筆記,值得收藏
    高中數學最早接觸函數,可見函數基礎的重要性,要想學好函數,首先必須要會畫基本初等函數的圖像,然後從圖像入手依次解決複雜的函數問題。閉上眼睛想一想,就覺得函數知識點,雜亂無章,無從記憶。函數該怎麼學,從哪裡入手呢?
  • 基本初等函數之指數函數
    在指數函數的定義表達式中,在a^x前的係數必須是數1,自變量x必須在指數的位置上,且不能是x的其他表達式,否則,就不是指數函數。指數函數應用到自然常數e上寫為exp(x),現常寫為e^x。函數性質1、指數函數的定義域為R,這裡的前提是a大於0且不等於1。對於a不大於0的情況,則必然使得函數的定義域不連續,因此我們不予考慮,同時a等於0函數無意義一般也不考慮。2、當a>1時,指數函數單調遞增;當0<a<1,指數函數單調遞減。
  • 高中函數圖像及其平移與變換
    基本初等函數的圖像 1.一次函數 >函數 y = f(x + a)的圖像可以把函數 y = f(x)的圖像沿x軸方向向左(a>0)或向右(a<0)平移|a|個單位即可得到; (2)豎直平移:函數 y = f(x) + a 的圖像可以把函數 y = f(x)的圖像沿x軸方向向上(a>0)或向下(a<0)平移|a|個單位即可得到。
  • 一個易被忽略的基本初等函數:冪函數
    冪函數是高中階段新學習的三種基本函數之一,在考試中也經常出現,或者作為一個工具來使用。小編總結了有關冪函數的常見題型,供大家參考。一、基礎知識注意:很多同學經常將冪函數和指數函數搞混淆,那麼我們如何區分冪函數和指數函數呢?
  • 你知道反函數及其求法和複合函數、函數的四個基本性質嗎?
    大家好,我是專升本數學學霸,這次我們繼續來討論反函數及其求法和複合函數、函數的四個基本性質。那你知道反函數及其求法和複合函數、函數的四個基本性質嗎?學霸來幫你來了。接下來,我們一起來討論複合函數,討論複合函數之前先來看看有那些基本初等函數:①冪函數②指數函數③對數函數④三角函數⑤反三角函數