C#复数类Complex的封装
生活随笔
收集整理的這篇文章主要介紹了
C#复数类Complex的封装
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C#復數類Complex的封裝
----------------------------------------------------------------------------------------------------------------------------------------------------------本文作者:隨煜而安 ? 時間:? ?二零一五年七月二十日 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 本文給出使用C#語言對于復數類Complex的封裝。包括大多數基本的運算及方法,個人感覺總結的蠻全的。話不多說,直接上代碼!
/// <summary>/// 復數類/// </summary>public class Complex{#region 字段//復數實部private double real = 0.0;//復數虛部private double imaginary = 0.0;#endregion#region 屬性/// <summary>/// 獲取或設置復數的實部/// </summary>public double Real{get{return real;}set{real = value;}}/// <summary>/// 獲取或設置復數的虛部/// </summary>public double Imaginary{get{return imaginary;}set{imaginary = value;}}#endregion#region 構造函數/// <summary>/// 默認構造函數,得到的復數為0/// </summary>public Complex():this(0,0){}/// <summary>/// 只給實部賦值的構造函數,虛部將取0/// </summary>/// <param name="dbreal">實部</param>public Complex(double dbreal):this(dbreal,0){}/// <summary>/// 一般形式的構造函數/// </summary>/// <param name="dbreal">實部</param>/// <param name="dbImage">虛部</param>public Complex(double dbreal, double dbImage){real = dbreal;imaginary = dbImage;}/// <summary>/// 以拷貝另一個復數的形式賦值的構造函數/// </summary>/// <param name="other">復數</param>public Complex(Complex other){real = other.real;imaginary = other.imaginary;}#endregion#region 重載//加法的重載public static Complex operator +(Complex comp1, Complex comp2){return comp1.Add(comp2);}//減法的重載public static Complex operator -(Complex comp1, Complex comp2){return comp1.Substract(comp2);}//乘法的重載public static Complex operator *(Complex comp1, Complex comp2){return comp1.Multiply(comp2);}//==的重載public static bool operator ==(Complex z1, Complex z2){return ((z1.real == z2.real) && (z1.imaginary == z2.imaginary));}//!=的重載public static bool operator !=(Complex z1, Complex z2){if (z1.real == z2.real){return (z1.imaginary != z2.imaginary);}return true;}/// <summary>/// 重載ToString方法,打印復數字符串/// </summary>/// <returns>打印字符串</returns>public override string ToString(){if (Real == 0 && imaginary == 0){return string.Format("{0}", 0);}if (Real == 0 && (imaginary != 1 && imaginary != -1)){return string.Format("{0} i", imaginary);}if (imaginary == 0){return string.Format("{0}", Real);}if (imaginary == 1){return string.Format("i");}if (imaginary == -1){return string.Format("- i");}if (imaginary < 0){return string.Format("{0} - {1} i", Real, -imaginary);}return string.Format("{0} + {1} i", Real, imaginary);}#endregion#region 公共方法/// <summary>/// 復數加法/// </summary>/// <param name="comp">待加復數</param>/// <returns>返回相加后的復數</returns>public Complex Add(Complex comp){double x = real + comp.real;double y = imaginary + comp.imaginary;return new Complex(x, y);}/// <summary>/// 復數減法/// </summary>/// <param name="comp">待減復數</param>/// <returns>返回相減后的復數</returns>public Complex Substract(Complex comp){double x = real - comp.real;double y = imaginary - comp.imaginary;return new Complex(x, y);}/// <summary>/// 復數乘法/// </summary>/// <param name="comp">待乘復數</param>/// <returns>返回相乘后的復數</returns>public Complex Multiply(Complex comp){double x = real * comp.real - imaginary * comp.imaginary;double y = real * comp.imaginary + imaginary * comp.real;return new Complex(x, y);}/// <summary>/// 獲取復數的模/幅度/// </summary>/// <returns>返回復數的模</returns>public double GetModul(){return Math.Sqrt(real * real + imaginary * imaginary);}/// <summary>/// 獲取復數的相位角,取值范圍(-π,π]/// </summary>/// <returns>返回復數的相角</returns>public double GetAngle(){#region 原先求相角的實現,后發現Math.Atan2已經封裝好后注釋實部和虛部都為0//if (real == 0 && imaginary == 0)//{// return 0;//}//if (real == 0)//{// if (imaginary > 0)// return Math.PI / 2;// else// return -Math.PI / 2;//}//else//{// if (real > 0)// {// return Math.Atan2(imaginary, real);// }// else// {// if (imaginary >= 0)// return Math.Atan2(imaginary, real) + Math.PI;// else// return Math.Atan2(imaginary, real) - Math.PI;// }//}#endregionreturn Math.Atan2(imaginary, real);}/// <summary>/// 獲取復數的共軛復數/// </summary>/// <returns>返回共軛復數</returns>public Complex Conjugate(){return new Complex(this.real, -this.imaginary);}#endregion}
----------------------------------------------------------------------------------------------------------------------------------------------------------本文作者:隨煜而安 ? 時間:? ?二零一五年七月二十日 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 本文給出使用C#語言對于復數類Complex的封裝。包括大多數基本的運算及方法,個人感覺總結的蠻全的。話不多說,直接上代碼!
/// <summary>/// 復數類/// </summary>public class Complex{#region 字段//復數實部private double real = 0.0;//復數虛部private double imaginary = 0.0;#endregion#region 屬性/// <summary>/// 獲取或設置復數的實部/// </summary>public double Real{get{return real;}set{real = value;}}/// <summary>/// 獲取或設置復數的虛部/// </summary>public double Imaginary{get{return imaginary;}set{imaginary = value;}}#endregion#region 構造函數/// <summary>/// 默認構造函數,得到的復數為0/// </summary>public Complex():this(0,0){}/// <summary>/// 只給實部賦值的構造函數,虛部將取0/// </summary>/// <param name="dbreal">實部</param>public Complex(double dbreal):this(dbreal,0){}/// <summary>/// 一般形式的構造函數/// </summary>/// <param name="dbreal">實部</param>/// <param name="dbImage">虛部</param>public Complex(double dbreal, double dbImage){real = dbreal;imaginary = dbImage;}/// <summary>/// 以拷貝另一個復數的形式賦值的構造函數/// </summary>/// <param name="other">復數</param>public Complex(Complex other){real = other.real;imaginary = other.imaginary;}#endregion#region 重載//加法的重載public static Complex operator +(Complex comp1, Complex comp2){return comp1.Add(comp2);}//減法的重載public static Complex operator -(Complex comp1, Complex comp2){return comp1.Substract(comp2);}//乘法的重載public static Complex operator *(Complex comp1, Complex comp2){return comp1.Multiply(comp2);}//==的重載public static bool operator ==(Complex z1, Complex z2){return ((z1.real == z2.real) && (z1.imaginary == z2.imaginary));}//!=的重載public static bool operator !=(Complex z1, Complex z2){if (z1.real == z2.real){return (z1.imaginary != z2.imaginary);}return true;}/// <summary>/// 重載ToString方法,打印復數字符串/// </summary>/// <returns>打印字符串</returns>public override string ToString(){if (Real == 0 && imaginary == 0){return string.Format("{0}", 0);}if (Real == 0 && (imaginary != 1 && imaginary != -1)){return string.Format("{0} i", imaginary);}if (imaginary == 0){return string.Format("{0}", Real);}if (imaginary == 1){return string.Format("i");}if (imaginary == -1){return string.Format("- i");}if (imaginary < 0){return string.Format("{0} - {1} i", Real, -imaginary);}return string.Format("{0} + {1} i", Real, imaginary);}#endregion#region 公共方法/// <summary>/// 復數加法/// </summary>/// <param name="comp">待加復數</param>/// <returns>返回相加后的復數</returns>public Complex Add(Complex comp){double x = real + comp.real;double y = imaginary + comp.imaginary;return new Complex(x, y);}/// <summary>/// 復數減法/// </summary>/// <param name="comp">待減復數</param>/// <returns>返回相減后的復數</returns>public Complex Substract(Complex comp){double x = real - comp.real;double y = imaginary - comp.imaginary;return new Complex(x, y);}/// <summary>/// 復數乘法/// </summary>/// <param name="comp">待乘復數</param>/// <returns>返回相乘后的復數</returns>public Complex Multiply(Complex comp){double x = real * comp.real - imaginary * comp.imaginary;double y = real * comp.imaginary + imaginary * comp.real;return new Complex(x, y);}/// <summary>/// 獲取復數的模/幅度/// </summary>/// <returns>返回復數的模</returns>public double GetModul(){return Math.Sqrt(real * real + imaginary * imaginary);}/// <summary>/// 獲取復數的相位角,取值范圍(-π,π]/// </summary>/// <returns>返回復數的相角</returns>public double GetAngle(){#region 原先求相角的實現,后發現Math.Atan2已經封裝好后注釋實部和虛部都為0//if (real == 0 && imaginary == 0)//{// return 0;//}//if (real == 0)//{// if (imaginary > 0)// return Math.PI / 2;// else// return -Math.PI / 2;//}//else//{// if (real > 0)// {// return Math.Atan2(imaginary, real);// }// else// {// if (imaginary >= 0)// return Math.Atan2(imaginary, real) + Math.PI;// else// return Math.Atan2(imaginary, real) - Math.PI;// }//}#endregionreturn Math.Atan2(imaginary, real);}/// <summary>/// 獲取復數的共軛復數/// </summary>/// <returns>返回共軛復數</returns>public Complex Conjugate(){return new Complex(this.real, -this.imaginary);}#endregion}
總結
以上是生活随笔為你收集整理的C#复数类Complex的封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 改进初学者的PID-微分冲击
- 下一篇: python字符串筛选输出_如何在Pyt