日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

画函数图形的C#程序(改进版) (转)

發布時間:2023/12/2 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 画函数图形的C#程序(改进版) (转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我在10月份發表過一篇隨筆“畫函數圖形的C#程序,兼論一個病態函數”,在那篇隨筆中寫道:
這個畫函數圖形的C#程序有一個嚴重的缺點,就是函數表達式是直接寫的源程序中的,不能象SciLab和Matlab那樣交互式地輸入。 后來,根據“空間/IV”的評論,我寫了個動態生成用戶輸入的函數表達式的類,用以改進這個畫函數圖形的C#程序。下面是該程序的運行效果:


可以看到,不但要畫的函數的表達式可以由用戶動態地輸入,而且函數自變量的范圍也可以是常量表達式。 下面就是源程序:
//?plot.cs:?畫函數圖形,?編譯方法:?csc?/t:winexe?plot.cs?Expression.cs
using?System;
using?System.Drawing;
using?System.Windows.Forms;
using?Skyiv.Util;

namespace?Skyiv.Ben.Plot
{
??
sealed?class?PlotForm?:?Form
??
{
????
const?int?yBase?=?24;?//?屏幕保留區域的高度

????TextBox?tbxX0,?tbxX1;??
//?函數自變量的取值范圍
????TextBox?tbxExpression;?//?函數的表達式
????
????PlotForm()
????
{
??????SuspendLayout();
??????
??????Button?btnSubmit?
=?new?Button();
??????btnSubmit.Text?
=?"刷新";
??????btnSubmit.Location?
=?new?Point(0,?0);
??????btnSubmit.Size?
=?new?Size(48,?24);
??????btnSubmit.Click?
+=?new?EventHandler(BtnSubmit_Click);

??????tbxX0?
=?new?TextBox();
??????tbxX0.Text?
=?"-Math.PI";
??????tbxX0.Location?
=?new?Point(55,?3);
??????tbxX0.Size?
=?new?Size(100,?20);

??????tbxX1?
=?new?TextBox();
??????tbxX1.Text?
=?"Math.PI";
??????tbxX1.Location?
=?new?Point(160,?3);
??????tbxX1.Size?
=?new?Size(100,?20);

??????tbxExpression?
=?new?TextBox();
??????tbxExpression.Text?
=?"Math.Sin(x)";
??????tbxExpression.Location?
=?new?Point(265,?3);
??????tbxExpression.Size?
=?new?Size(335,?20);
??????tbxExpression.Anchor?
=?(AnchorStyles.Top?|?AnchorStyles.Left?|?AnchorStyles.Right);

??????Controls.AddRange(
new?Control[]{btnSubmit,?tbxX0,?tbxX1,?tbxExpression});
??????Text?
=?"Plot";
??????BackColor?
=?Color.White;
??????ClientSize?
=?new?Size(600,?600?+?yBase);
??????
//?WindowState?=?FormWindowState.Maximized;

??????ResumeLayout(
false);
????}


????
//?點擊“刷新”按鈕時重繪程序主窗口
????void?BtnSubmit_Click(object?sender,?EventArgs?e)
????
{
??????Invalidate();
????}

????
????
/**//*
????//?因為本程序使用?C#?的反射功能動態生成數學表達式并計算其值
????//?所以重畫時有點慢,如果你的計算機的速度不是非常快的,
????//?就不要在窗口改變大小時強制重繪,而是通過點擊發“刷新”按鈕重繪。
????protected?override?void?OnSizeChanged(EventArgs?e)
????{
??????Invalidate();
??????base.OnSizeChanged(e);
????}
????
*/

????
????
protected?override?void?OnPaint(PaintEventArgs?e)
????
{
??????Graphics?gc?
=?e.Graphics;
??????
try
??????
{
????????
double?x0?=?new?Expression(tbxX0.Text).Compute(0);
????????
double?x1?=?new?Expression(tbxX1.Text).Compute(0);
????????Size?size?
=?ClientSize;
????????
int?i0?=?0;
????????
int?i1?=?size.Width?-?1;
????????
int?j0?=?yBase;
????????
int?j1?=?size.Height?-?1;
????????Pen?pen?
=?new?Pen(Color.Black,?1);
????????gc.DrawLine(pen,?i0,?j0,?i1,?j0);?
//?畫圖區和保留區的分界線
????????double?rx?=?(x1?-?x0)?/?(i1?-?i0);
????????
double?y0,?y1;
????????Expression?fx?
=?new?Expression(tbxExpression.Text);
????????GetFunctionValueRange(fx,?x0,?rx,?i0,?i1,?
out?y0,?out?y1);
????????
double?ry?=?(y1?-?y0)?/?(j1?-?j0);
????????Out(gc,?
0,?"ClientSize:?{0}x{1}",?i1?-?i0?+?1,?j1?-?j0?+?1);
????????Out(gc,?
1,?"f(x):?"?+?tbxExpression.Text);
????????Out(gc,?
2,?"x:[{0},?{1}]?range:{2}",?x0,?x1,?x1?-?x0);
????????Out(gc,?
3,?"y:[{0},?{1}]?range:{2}",?y0,?y1,?y1?-?y0);
????????Out(gc,?
4,?"rx:{0}",?1?/?rx);??//?函數自變量每單位值用多少個象素表示
????????Out(gc,?5,?"ry:{0}",?1?/?ry);??//?函數的值每單位值用多少個象素表示
????????Out(gc,?6,?"r?:{0}",?rx?/?ry);?//?該值如果小于1表示圖形縱向被壓扁,反之則被拉伸
????????pen.Color?=?Color.Green;
????????
int?j?=?j1?+?(int)(y0?/?ry);
????????
if?(j?>=?j0?&&?j?<=?j1)?gc.DrawLine(pen,?i0,?j,?i1,?j);?//?x坐標軸
????????int?i?=?i0?-?(int)(x0?/?rx);
????????
if?(i?>=?i0?&&?i?<=?i1)?gc.DrawLine(pen,?i,?j0,?i,?j1);?//?y坐標軸
????????pen.Color?=?Color.Red;
????????
for?(i?=?i0;?i?<=?i1;?i++)
????????
{
??????????
double?x?=?x0?+?(i?-?i0)?*?rx;
??????????
double?y?=?fx.Compute(x);
??????????
if?(double.IsInfinity(y)?||?double.IsNaN(y))?continue;
??????????j?
=?j1?-?(int)((y?-?y0)?/?ry);
??????????
if?(j?>?j1?||?j?<?j0)?continue;
??????????gc.DrawLine(pen,?i,?j,?i?
+?1,?j);?//?畫函數的圖形
????????}

??????}

??????
catch?(Exception?ex)
??????
{
????????Out(gc,?
0,?ex.Message);
??????}

??????
base.OnPaint(e);
????}

????
????
//?函數值的取值范圍
????void?GetFunctionValueRange(Expression?fx,?double?x0,?double?rx,?int?i0,?int?i1,?out?double?y0,?out?double?y1)
????
{
??????y0?
=?double.MaxValue;
??????y1?
=?double.MinValue;
??????
for?(int?i?=?i0;?i?<=?i1;?i++)
??????
{
????????
double?x?=?x0?+?(i?-?i0)?*?rx;
????????
double?y?=?fx.Compute(x);
????????
if?(double.IsInfinity(y)?||?double.IsNaN(y))?continue;
????????
if?(y0?>?y)?y0?=?y;
????????
if?(y1?<?y)?y1?=?y;
??????}

????}

????
????
//?在指定的位置寫字符串
????void?Out(Graphics?gc,?int?line,?string?fmt,?params?object?[]?args)
????
{
??????gc.DrawString(
string.Format(fmt,?args),?new?Font("Courier?New",?10),?Brushes.Blue,?new?PointF(5,?yBase?+?15?*?line));
????}


????
static?void?Main()
????
{
??????Application.Run(
new?PlotForm());
????}

??}

}

轉載于:https://www.cnblogs.com/gjahead/archive/2007/08/18/861164.html

總結

以上是生活随笔為你收集整理的画函数图形的C#程序(改进版) (转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产cao| 日本免费高清一区二区 | 成人精品一区日本无码网 | 成人合集 | 亚洲欧美精品suv | 欧美一级二级片 | 国产色图片 | 99国产精品一区二区三区 | 久久在线中文字幕 | 九九热国产| 国产日韩一区二区在线 | 18视频在线观看男男 | 中文字幕123区 | 天天射日日射 | 九九视频这里只有精品 | 国产三级视频在线播放 | 日韩成人av免费在线观看 | 狠狠撸在线视频 | 刘玥91精选国产在线观看 | 关之琳三级全黄做爰在线观看 | se欧美| 男人日女人逼 | 一级黄色美女视频 | 不卡一二区 | 国产无套粉嫩白浆内谢 | 牛牛影视一区二区三区 | 国产一区二区三区视频播放 | 成人av一区二区三区在线观看 | 亚洲精品1 | 高潮流白浆在线观看 | 秋霞毛片少妇激情免费 | 亚洲乱码少妇 | 婷婷综合色 | 国产无遮挡又黄又爽免费网站 | 韩国成人免费视频 | 国产女主播喷水高潮网红在线 | 风间由美一区 | 强开小受嫩苞第一次免费视频 | 一级久久久 | 少妇献身老头系列 | 免费成人av| 曰本女人与公拘交酡 | 日本欧美在线观看 | 免费伊人 | 色婷婷一区二区三区四区 | 国产伦一区二区三区 | 香蕉久久影院 | 国产精品污www一区二区三区 | 91成人看片| 国产黄a三级三级三级看三级男男 | 国产精品国产精品国产专区不卡 | 丰满肉肉bbwwbbww | 少妇一区二区视频 | 在线观看视频99 | 不卡中文字幕 | 久久99精品久久久久久国产越南 | 91精品国产电影 | 久久这里| 日本va欧美va欧美va精品 | 亚洲国产精品视频一区二区 | 国产婷婷色一区二区三区在线 | 国产精品久久久久久久av | 黄色av中文字幕 | 校园春色亚洲色图 | 麻豆一区二区99久久久久 | 国产高清久久久 | 欧美色一区二区三区在线观看 | 日本女优中文字幕 | 强行糟蹋人妻hd中文字幕 | 欧美一区二区视频免费观看 | 日韩视频免费观看高清完整版 | 91亚洲精品在线 | 成人尹人 | 女色综合 | 欧美天堂在线观看 | 国产午夜精品一区二区三区 | 男人操女人网站 | 18视频在线观看娇喘 | 国产女人18毛片水真多18精品 | 日韩h在线 | 欧美视频精品 | 免费在线黄| 欧美色国| 青青青草视频在线 | 偷偷在线观看免费高清av | 激情久久综合 | 久操色| 99精品影视 | 精品人妻二区中文字幕 | 在线视频国产一区 | 日韩伦理一区二区三区 | 日本特级黄色录像 | 国内自拍在线观看 | 欧美日韩视频 | 精品久久久99 | 天天看片中文字幕 | 97久久国产 | 91黄色看片 | 免费一区视频 |