今天的課很好,沒聽!老師沒影響我看書,所以比較認真的翻閱《編程之美》。書中對我“腦細菌”打擊最深的是一個關於三角形的問題(其他內容沒機會打擊我,沒看懂@@!)!
題目:已知一個三角形的ABC三點座標,判斷D點是否在三角形內?
揭發:
- /*
- * Created by SharpDevelop.
- * User: Sconfield
- * Date: 2009/9/1
- * Time: 20:47
- *
- * To change this template use Tools | Options | Coding | Edit Standard Headers.
- */
- using System;
- using System.Drawing;
- namespace Judge
- {
- class Triangle
- {
- /// <summary>
- /// 兩點間的距離
- /// </summary>
- /// <param name="d1">座標1</param>
- /// <param name="d2">座標2</param>
- /// <returns>返回兩點間的距離</returns>
- private static double Distance(Point d1, Point d2)
- {
- double x, y;
- x=Math.Abs(d1.X-d2.X);
- y=Math.Abs(d1.Y-d2.Y);
- return Math.Sqrt(Math.Pow(x,2)+Math.Pow(y,2));
- }
- /// <summary>
- /// 面積
- /// </summary>
- /// <param name="X">三角形頂點一座標</param>
- /// <param name="Y">三角形頂點二座標</param>
- /// <param name="Z">三角形頂點三座標</param>
- /// <returns>返回三角形的面積</returns>
- private static double Area(Point X, Point Y, Point Z)
- {
- //邊長
- double side1, side2, side3;
- side1=Distance(X, Y);
- side2=Distance(Y, Z);
- side3=Distance(X, Z);
- double p=(side1+side2+side3)/2;
- //海倫公式(居然把她遺忘了,囧!)
- return Math.Sqrt(p*(p-side1)*(p-side2)*(p-side3));
- }
- /// <summary>
- /// 判斷D是否在三角形ABC內
- /// </summary>
- /// <param name="A">A點</param>
- /// <param name="B">B點</param>
- /// <param name="C">C點</param>
- /// <param name="D">D點</param>
- public static void isInTriangle(Point A, Point B, Point C, Point D)
- {
- if(Area(A, B, C)<Area(A, B, D)+Area(B, C ,D)+Area(C, D, A))
- {
- Console.WriteLine("D點不在三角形ABC內!");
- }
- else
- {
- Console.WriteLine("D點在三角形ABC內!");
- }
- }
- }
- }