ใช้โครงสร้างที่แสดงถึงมุม
มุมจะถูกจัดเก็บไว้ในหน่วยความจำในหน่วยการวัดมุมที่กำหนดไว้แต่แรก โดยมีความแม่นยำเป็นสองเท่า ช่วยให้ควบคุมการแปลงได้อย่างละเอียดและลดข้อผิดพลาดในการปัดเศษ การดำเนินการทั้งหมดเป็นการพิมพ์แบบเข้มงวด
รวมถึงการดำเนินการของมุม เช่น lerp การลดลง มุมอ้างอิง การเปรียบเทียบ การจำแนกประเภท และตรีโกณมิติ
NetFabric.Angle มีให้บริการทั้งในรูปแบบแพ็คเกจ NuGet และแพ็คเกจ Unity
ใช้วิธีการสำหรับหน่วยการวัดที่คุณใช้งานอยู่:
var right0 = Angle . FromRadian ( Math . PI / 2.0 ) ;
var right1 = Angle . FromDegrees ( 90.0 ) ;
var right3 = Angle . FromGradian ( 100.0 ) ;
เมื่อใช้รูปแบบ DMS อาร์คนาทีและอาร์ควินาทีจะต้องเป็นค่าในช่วงเวลา [0.0, 60.0[
var right3 = Angle . FromDegrees ( 90 , 59.9 ) ; // degrees and arcminutes
var right4 = Angle . FromDegrees ( - 90 , 59 , 59.9 ) ; // degrees, arcminutes and arcseconds
คุณสามารถใช้มุมที่กำหนดไว้ล่วงหน้าในหน่วยการวัดใดก็ได้:
var zero = AngleDegrees . Zero ; // 0 degrees
var right = AngleDegrees . Right ; // 90 degrees
var straight = AngleDegrees . Straight ; // 180 degrees
var full = AngleDegrees . Full ; // 360 degrees
var zero = AngleRadians . Zero ; // 0 radians
var right = AngleRadians . Right ; // PI/2 radians
var straight = AngleRadians . Straight ; // PI radians
var full = AngleRadians . Full ; // 2 * PI radians
ใช้วิธี static
เพื่อแปลงมุมใดๆ:
var radians = Angle . ToRadians ( angle ) ;
มุมถูกพิมพ์อย่างหนักแน่นเพื่อให้รู้ว่าหน่วยการวัดกำลังแปลงจากอะไร
หมายเหตุ: หากจำเป็น จะต้องลดผลลัพธ์ลงอย่างชัดเจน
ใช้คุณสมบัติที่ตั้งชื่อตามหน่วยการวัด (เพื่อให้ชัดเจน):
var radians = angleRadians . Radians ;
var degrees = angleDegrees . Degrees ;
var gradians = angleGradians . Gradians ;
มุมในหน่วยองศาสามารถแยกโครงสร้างออกเป็นสัญกรณ์ DMS ได้ ซึ่งสามารถทำได้โดยใช้อาร์กิวเมนต์ out อย่างใดอย่างหนึ่ง:
int degrees0 ;
double minute0 ;
angleDegrees . Deconstruct ( out degrees0 , out minutes0 ) ;
int degrees1 ;
int minute1 ;
double seconds1 ;
angleDegrees . Deconstruct ( out degrees1 , out minutes1 , out seconds1 ) ;
ออก อาร์กิวเมนต์ด้วยไวยากรณ์ C# 7:
angleDegrees . Deconstruct ( out var degrees0 , out var minutes0 ) ;
angleDegrees . Deconstruct ( out var degrees1 , out var minutes1 , out var seconds1 ) ;
หรือใช้ deconstructors C# 7:
var ( degrees0 , minutes0 ) = angleDegrees ;
var ( degrees1 , minutes1 , seconds1 ) = angleDegrees ;
มุมสามารถลดลงเป็นมุม coterminal ในช่วง [0.0, 360.0[ องศา:
var angle = Angle . Reduce ( AngleDegrees . Right + AngleDegrees . Full ) ; // result is AngleDegrees.Right
รับมุมอ้างอิง (มุมที่เล็กที่สุดกับแกน x):
var angle = Angle . GetReference ( AngleDegrees . Right + AngleDegrees . FromDegrees ( 45.0 ) ) ; // result is an angle with 45 degrees
ตัวดำเนินการทางคณิตศาสตร์ถูกกำหนดไว้เพื่อให้สามารถคำนวณด้วยมุมได้
var angle0 = - AngleDegrees . Right ;
var angle1 = AngleDegrees . Straight + Angle . FromDegrees ( 45.0 ) ;
var angle2 = 2.0 * Angle . FromDegrees ( 30.0 ) ;
var angle3 = Angle . FromDegrees ( 30.0 ) / 2.0 ;
หมายเหตุ: หากจำเป็น จะต้องลดผลลัพธ์ลงอย่างชัดเจน
นอกจากนี้ยังมีการกำหนดวิธีการที่เทียบเท่ากันเพื่อให้สามารถใช้กับภาษาที่ไม่รองรับตัวดำเนินการได้
var angle0 = Angle . Negate ( AngleDegrees . Right ) ;
var angle1 = Angle . Add ( AngleDegrees . Straight , Angle . FromDegrees ( 45.0 ) ) ;
var angle2 = Angle . Multiply ( 2.0 , Angle . FromDegrees ( 30.0 ) ) ;
var angle3 = Angle . Divide ( Angle . FromDegrees ( 30.0 ) , 2.0 ) ;
ตัวดำเนินการเปรียบเทียบสามารถใช้เพื่อเปรียบเทียบสองมุมได้:
if ( angle0 > angle1 || angle0 == angle2 ) {
.. .
}
สำหรับภาษาที่ไม่รองรับโอเปอเรเตอร์ ให้ใช้เมธอด static Compare():
if ( Angle . Compare ( angle0 , angle1 ) <= 0 ) { // less or equal to
.. .
}
ด้วยเหตุผลด้านประสิทธิภาพ ค่าที่เปรียบเทียบจะไม่ลดลง หากจำเป็นจะต้องลดขนาดลงอย่างชัดเจน:
if ( Angle . Reduce ( angle0 ) > Angle . Reduce ( angle1 ) ) {
.. .
}
หรือใช้เมธอด CompareReduced() แบบคงที่:
if ( Angle . CompareReduced ( angle0 , angle1 ) > 0 ) {
.. .
}
การคำนวณตรีโกณมิติตามปกติ (sin, cos, tan, asin, acos, atan, sinh และ cosh) ใช้เป็นวิธีการคงที่ แต่สำหรับมุมในเรเดียนเท่านั้น:
double value0 = Angle . Sin ( angleRadians ) ;
AngleRadians angle0 = Angle . Asin ( value0 ) ;
ต้องแปลงมุมที่ไม่เป็นเรเดียน:
double value1 = Angle . Sin ( Angle . ToRadians ( angleDegrees ) ) ;
AngleDegrees angle1 = Angle . ToDegrees ( Angle . Asin ( value1 ) ) ;
คุณจะได้จตุรัสของมุม
var quad0 = Angle . GetQuadrant ( Angle . FromDegrees ( 45.0 ) ) ; // Angle.Quadrant.First
var quad1 = Angle . GetQuadrant ( Angle . FromDegrees ( 220.0 ) ) ; // Angle.Quadrant.Third
var quad2 = Angle . GetQuadrant ( Angle . FromDegrees ( - 45.0 ) ) ; // Angle.Quadrant.Fourth
และสามารถตรวจสอบได้ว่ามุมแหลม ขวา มุมป้าน ตรง หรือสะท้อน:
var isAcute = Angle . IsAcute ( AngleDegrees . Right ) ; // false
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 45.0 ) ) ; // true
var isRight = Angle . IsRight ( AngleDegrees . Right ) ; // true
การจำแนกประเภทจะพิจารณาความเท่าเทียมกันเชิงบวกที่ลดลงของมุม ดังนั้น:
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 45.0 ) ) ; // true
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( - 45.0 ) ) ; // true
var isAcute = Angle . IsAcute ( Angle . FromDegrees ( 315.0 ) ) ; // false