728x90
반응형
728x170
using System;
/// <summary>
/// 복소수
/// </summary>
public struct Complex
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 실수부
/// </summary>
private double real;
/// <summary>
/// 가수부
/// </summary>
private double imaginary;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 0 - Zero
/// <summary>
/// 0
/// </summary>
public static Complex Zero
{
get
{
return new Complex(0d, 0d);
}
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Instance
//////////////////////////////////////////////////////////////////////////////// Public
#region 실수부 - Real
/// <summary>
/// 실수부
/// </summary>
public double Real
{
get
{
return this.real;
}
set
{
this.real = value;
}
}
#endregion
#region 가수부 - Imaginary
/// <summary>
/// 가수부
/// </summary>
public double Imaginary
{
get
{
return this.imaginary;
}
set
{
this.imaginary = value;
}
}
#endregion
#region 크기 - Magnitude
/// <summary>
/// 크기
/// </summary>
public double Magnitude
{
get
{
return Math.Sqrt(this.real * this.real + this.imaginary * this.imaginary);
}
}
#endregion
#region 위상 - Phase
/// <summary>
/// 위상
/// </summary>
public double Phase
{
get
{
return Math.Atan(this.imaginary / this.real);
}
}
#endregion
#region 제곱 크기 - SquaredMagnitude
/// <summary>
/// 제곱 크기
/// </summary>
public double SquaredMagnitude
{
get
{
return (this.real * this.real + this.imaginary * this.imaginary);
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - Complex(real, imaginary)
/// <summary>
/// 생성자
/// </summary>
/// <param name="real">가수부</param>
/// <param name="imaginary">실수부</param>
public Complex(double real, double imaginary)
{
this.real = real;
this.imaginary = imaginary;
}
#endregion
#region 생성자 - Complex(complex)
/// <summary>
/// 생성자
/// </summary>
/// <param name="complex">복소수</param>
public Complex(Complex complex)
{
this.real = complex.Real;
this.imaginary = complex.Imaginary;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region + 연산자 - operator+(complex1, complex2)
/// <summary>
/// + 연산자
/// </summary>
/// <param name="complex1">복소수 1</param>
/// <param name="complex2">복소수 2</param>
/// <returns>복소수</returns>
public static Complex operator+(Complex complex1, Complex complex2)
{
return new Complex(complex1.Real + complex2.Real, complex1.Imaginary + complex2.Imaginary);
}
#endregion
#region - 연산자 - operator-(complex1, complex2)
/// <summary>
/// 연산자 -
/// </summary>
/// <param name="complex1">복소수 1</param>
/// <param name="complex2">복소수 2</param>
/// <returns>복소수</returns>
public static Complex operator-(Complex complex1, Complex complex2)
{
return new Complex(complex1.Real - complex2.Real, complex1.Imaginary - complex2.Imaginary);
}
#endregion
#region * 연산자 - operator*(complex1, complex2)
/// <summary>
/// 연산자 *
/// </summary>
/// <param name="complex1">복소수 1</param>
/// <param name="complex2">복소수 2</param>
/// <returns>복소수</returns>
public static Complex operator*(Complex complex1, Complex complex2)
{
return new Complex
(
complex1.Real * complex2.Real - complex1.Imaginary * complex2.Imaginary,
complex1.Real * complex2.Imaginary + complex1.Imaginary * complex2.Real
);
}
#endregion
#region / 연산자 - operator/(complex1, complex2)
/// <summary>
/// / 연산자
/// </summary>
/// <param name="complex1">복소수 1</param>
/// <param name="complex2">복소수 2</param>
/// <returns>복소수</returns>
public static Complex operator/(Complex complex1, Complex complex2)
{
double divider = complex2.Real * complex2.Real + complex2.Imaginary * complex2.Imaginary;
if(divider == 0)
{
throw new DivideByZeroException();
}
return new Complex
(
(complex1.Real * complex2.Real + complex1.Imaginary * complex2.Imaginary) / divider,
(complex1.Imaginary * complex2.Real - complex1.Real * complex2.Imaginary) / divider
);
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Instance
//////////////////////////////////////////////////////////////////////////////// Public
#region 문자열 구하기 - ToString()
/// <summary>
/// 문자열 구하기
/// </summary>
/// <returns>문자열</returns>
public override string ToString()
{
return string.Format
(
"{0}{1}{2}i",
this.real,
((this.imaginary < 0) ? '-' : '+'),
Math.Abs(this.imaginary)
);
}
#endregion
}
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 원형 포인트 리스트 구하기 (0) | 2014.12.31 |
---|---|
[C#/COMMON] 각도 구하기 (0) | 2014.12.31 |
[C#/COMMON] 2 제곱 수 여부 조사하기 (0) | 2014.12.31 |
[C#/COMMON] 소수(素數) 여부 조사하기 (0) | 2014.12.31 |
[C#/COMMON] 소수(素數) 리스트 구하기 (0) | 2014.12.31 |
[C#/COMMON] 라디안 구조체 (0) | 2014.12.31 |
[C#/COMMON] 도/분/초 구조체 (0) | 2014.12.31 |
[C#/COMMON] 각도 구하기 (0) | 2014.12.31 |
[C#/COMMON] 거리 구하기 (0) | 2014.12.31 |
[C#/COMMON] Math 클래스 : Round 정적 메소드를 사용해 반올림하기 (0) | 2014.12.31 |
댓글을 달아 주세요