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

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

回顧:上一篇文章介紹了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就特別慢,可以試試挺好玩的。曲線寬度就是繪製出的線條寬度。

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

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

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

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

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

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

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

相關焦點

  • 基本初等函數 指數函數 代碼篇
    本文首發於微信公眾號:"算法與編程之美",歡迎關注,及時了解更多此系列博客。由於機器學習和數學密切相關,尤其是數學中的函數,因此我們非常有必要複習和了解基本的函數知識。上一篇文章中,我們為大家介紹了基本初等函數中的指數函數 基本初等函數 指數函數,本文將為大家介紹如何利用python語言完成函數的繪製。
  • 高中數學公式大全:函數、基本初等函數的圖像與性質
    高中數學公式大全:函數、基本初等函數的圖像與性質 2019-02-15 15:24 來源:新東方網編輯整理 作者:
  • Matlab|繪製函數圖像
    一、繪製圖像的常用思路在通常情況下,手動繪製函數圖像的基本思路是確定自變量的取值範圍、選取合適的自變量點、通過函數表達式得出對應的應變量的點、將這些點連接起來,即可得到大致圖像。使用Matlab繪製函數圖像也是使用這樣的思路,當自變量的點取得夠多時,連接這些點的圖形就越接近函數圖像。
  • 一起來討論特殊函數、三角函數誘導公式、基本初等函數圖像的性質
    大家好,我是專升本數學學霸,這次我們繼續來討論分段函數、三角函數誘導公式、基本初等函數圖像的性質。那你知道分段函數、三角函數誘導公式、基本初等函數圖像的性質嗎?學霸來幫你來了。首先,我們來看看幾個特殊函數。
  • 高一數學必修1基本初等函數解題技巧
    高一數學必修1基本初等函數解題技巧整個高中的數學都是圍繞函數進行考察的,而函數都是圍繞基本初等函數進行相關的變形進行相關的考察的,所以必須從基本初等函數下手,來解決函數中的相關問題,找到突破口,掌握考點
  • 高一數學中基本初等函數中需要注意的問題
    高中數學必修一,出現了函數的基本性質,然後是基本初等函數。一:指數函數。指數的運算基本是沒問題的初中已經涉及這個知識點了,所有的公式我給同學列出來,最主要的是指數函數的概念,性質,定義域和值域。對數函數的圖像和指數函數的圖像是關於y=x這條直線對稱的,因為它們互為反函數。所謂反函數,就是原函數的定義域就是反函數的值域,原函數的值域是反函數的定義域,掌握了這點再去理解,然後記住對數函數的圖像和它的增減性,還要知道以十為底的對數和自然對數的寫法。
  • 專升本考試最重要的知識點:6大類基本初等函數
    常用的六類函數,即常數函數、冪函數、指數函數、對數函數、三角函數與反三角函數,這六類函數稱為基本初等函數。一、常數函數y = c 或 f ( x ) = c , x ∈ R ,其中 c 是常數。它的圖像是通過點 (0,c),且平行 x 軸的直線,如下圖所示:常數函數的圖像常數函數的性質:1、常數函數是有界函數,周期函數(沒有最小的正周期)、偶函數;2、常數函數既是單調增加函數又是單調減少函數,特別的當 c = 0 時,它還是奇函數
  • 用Excel繪製複雜的函數圖像
    在Excel中可以輕鬆地繪製出複雜的數學函數圖像,還可以將多個函數圖像放入同一圖表中進行對比。
  • Matlab入門教程 | 009二維作圖:看完此文,所有初等函數的圖像都會畫了!
    微積分告訴我們,常數與五種基本初等函數經過有限次複合和有限次四則運算、有限次乘方、開方得到的函數叫作初等函數。初等函數在其定義區間上是連續的。前一篇推文Matlab入門教程 | 008二維作圖:一文講透plot用法介紹了plot畫圖的要領,今天我們介紹用plot畫任意初等函數的方法。
  • 【MATLAB圖像】— 繪製plot與其它二維圖形
    1、最基本的plot函數        格式為:plot(y),plot(x,y),plot(x,y,s),s
  • 冪指對,高中數學你不得不面對的基本初等函數
    冪函數,指數函數,對數函數是也!高中數學函數的基礎,三大基本初等函數而已,記住僅是而已!>強調:冪指對的學習,堅持從:定義-解析式-圖像-性質,這條主線學習;首先:定義概念的學習首當其衝,搞清楚這三大函數的定義是核心要義。
  • (乾貨、精品)高中數學基礎知識之函數概念與基本初等函數
    今天與大家分享高中數學基礎知識——函數概念與基本初等函數。例2:已知函數y=f(1-x)的圖像經過點(-1,1),則函數y=f(4+x)的反函數必過點___。故y=f(4+x)的圖像必過點(-2,1),其反函數圖像必過點(1,-2)。②兩函數互為反函數兩函數的圖像關於直線y=x對稱。
  • 2019年高考數學函數專題複習:基本初等函數
    函數基本概念與基本初等函數  一.考綱知識點等級:  1.函數的有關概念B;         2.函數的基本性質B;         3.指數與對數B;  4.指數函數的圖象與性質B;   5.對數函數的圖象與性質B;   6.
  • 人教A版高中數學必修1第二章《基本初等函數(I)》思維導圖
    本文我們就以人教版A版必修1高一數學《第二章 基本初等函數(1)》為例進行梳理總結。總體內容大綱如下。高中數學必修一第二章基本初等函數1一、 指數函數高中數學《指數函數》思維導圖指數函數這節,重點在指數運算法則、指數函數的圖像性質、指數式大小比較,高考中一般以選擇題或填空題的形式出現。
  • Excel中怎麼繪製出好看的函數圖像
    小編這裡要跟大家分享的是關於Excel中怎麼繪製出好看的函數圖像的方法,當我們在使用Excel製作文檔的時候,偶爾要繪製函數圖像,有些人會選擇用手工方法來繪製函數圖像,但是效果明顯是不太好的,然而在Excel中就非常簡單了,而且繪製出來的函數圖像非常標準、漂亮,不過大部分人可能還不知道怎麼繪製哦,那就跟小編一起來學習吧!
  • 學好函數的圖像,高考充滿了力量
    高中函數的圖像內容是高考的熱點之一,而數形結合的思想是高考數學函數試題中的基本方法,數形結合的思想是將抽象的數學語言與直觀的圖像結合起來。因此學好了函數的圖像,可以直觀解決很多數學問題。一、畫函數圖象的一般方法 1. 直接法:當函數表達式(或變形後的表達式)是熟悉的基本初等函數時,就可以根據這些函數的特徵直接作出。2.
  • 《對數函數的圖像與性質》的教學新設計
    1.教案設計【教材】人教A版(2007)普通高中數學必修一2.2.2【課時安排】第1課時【教材分析】將複雜的函數問題化歸為簡單的基本初等函數問題,是研究函數的核心思路.對數函數就是一種重要的基本初等函數.本節內容是在學習對數的概念和運算性質後,進一步學習對數函數的定義、圖像、性質及初步應用.對數函數的圖像與性質的學習過程與指數函數部分的學習類似,注重學生參與探究的過程
  • 函數概念與基本初等函數的教材分析
    函數正式描述客觀世界變化規律的重要數學模型,通過函數模型可以幫助我們解決許多實際問題。因此,學習函數知識對研究客觀世界,掌握事物變化規律具有重要的意義。一、本章教育目標函數是本章的核心概念,也是中學數學中的基本概念。高中階段不僅把函數變成變量之間的依賴關係,同時還用集合與對應的豫園刻畫函數,函數的思想方法貫穿整個高中數學課程。
  • 連續函數的運算與初等函數的連續性
    (複合函數的連續性)若函數f在點x0處連續,g在u0處連續,u0=f(x0),則複合函數g[f(x)]在點x0處連續,即連續函數的複合函數仍然連續。說 明:1、根據連續性的定義,上述結論可以表示為:2、若複合函數g[f(x)]的內函數f當
  • 高考數學中的幾類非基本初等函數總結
    函數章節是高考數學的重要組成部分。它有著」三最」之稱。即:最基礎、最重要、最難學。曾經我的高中數學老師毫不保留地說「高中數學得函數者得天下」,函數學好了,你的高中數學成功了一半。不管是不是過於誇張,但也足以說明函數的重要性。