算法發現~判斷點是否在三角形內

     今天的課很好,沒聽!老師沒影響我看書,所以比較認真的翻閱《編程之美》。書中對我“腦細菌”打擊最深的是一個關於三角形的問題(其他內容沒機會打擊我,沒看懂@@!)!

題目:已知一個三角形的ABC三點座標,判斷D點是否在三角形內?

揭發:

Code:
  1. /* 
  2.  * Created by SharpDevelop. 
  3.  * User: Sconfield 
  4.  * Date: 2009/9/1 
  5.  * Time: 20:47 
  6.  *  
  7.  * To change this template use Tools | Options | Coding | Edit Standard Headers. 
  8.  */  
  9.   
  10. using System;  
  11. using System.Drawing;  
  12.   
  13. namespace Judge  
  14. {  
  15.     class Triangle  
  16.     {  
  17.         /// <summary>  
  18.         /// 兩點間的距離  
  19.         /// </summary>  
  20.         /// <param name="d1">座標1</param>  
  21.         /// <param name="d2">座標2</param>  
  22.         /// <returns>返回兩點間的距離</returns>  
  23.         private static double Distance(Point d1, Point d2)  
  24.         {  
  25.             double x, y;  
  26.             x=Math.Abs(d1.X-d2.X);  
  27.             y=Math.Abs(d1.Y-d2.Y);  
  28.             return Math.Sqrt(Math.Pow(x,2)+Math.Pow(y,2));  
  29.         }  
  30.         /// <summary>  
  31.         /// 面積  
  32.         /// </summary>  
  33.         /// <param name="X">三角形頂點一座標</param>  
  34.         /// <param name="Y">三角形頂點二座標</param>  
  35.         /// <param name="Z">三角形頂點三座標</param>  
  36.         /// <returns>返回三角形的面積</returns>  
  37.         private static double Area(Point X, Point Y, Point Z)  
  38.         {  
  39.             //邊長  
  40.             double side1, side2, side3;  
  41.             side1=Distance(X, Y);  
  42.             side2=Distance(Y, Z);  
  43.             side3=Distance(X, Z);  
  44.             double p=(side1+side2+side3)/2;  
  45.             //海倫公式(居然把她遺忘了,囧!)  
  46.             return Math.Sqrt(p*(p-side1)*(p-side2)*(p-side3));  
  47.         }  
  48.         /// <summary>  
  49.         /// 判斷D是否在三角形ABC內  
  50.         /// </summary>  
  51.         /// <param name="A">A點</param>  
  52.         /// <param name="B">B點</param>  
  53.         /// <param name="C">C點</param>  
  54.         /// <param name="D">D點</param>  
  55.         public static void isInTriangle(Point A, Point B, Point C, Point D)  
  56.         {  
  57.             if(Area(A, B, C)<Area(A, B, D)+Area(B, C ,D)+Area(C, D, A))  
  58.             {  
  59.                 Console.WriteLine("D點不在三角形ABC內!");  
  60.             }  
  61.             else  
  62.             {  
  63.                 Console.WriteLine("D點在三角形ABC內!");  
  64.             }  
  65.         }  
  66.     }  
  67. }  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章