namespace Quiz_4_9
{
public class Point//Point 類別
{
public double PointX;
public double PointY;
//計算輸入點與成員變數的距離
public double DistanceTo(Point Input)
{
return Math.Sqrt((Input.PointX - PointX) * (Input.PointX - PointX) + (Input.PointY - PointY) * (Input.PointY - PointY));
}
}
}
namespace Quiz_4_9
{
class PinBoard //釘版類別
{
public int Row;//列
public int Column;//行
public double RowInterval;
public double ColumnInterval;
public Point[,] PinArray;
public void CreatPinArray()
{
PinArray = new Point[Row, Column];
for (int i = 0; i < Row; i++)
{
for (int j = 0; j < Column; j++)
PinArray[i, j] = new Point();
}
}
public void SetPointPostion()
{
for (int i = 0; i < Row; )
{
for (double ValueRow = 0; i < Row; i++, ValueRow += RowInterval)
{
for (int j = 0; j < Column; )
{
for (double ValueCol = 0; j < Column; j++, ValueCol += ColumnInterval)
{
PinArray[i, j].PointX = ValueRow;
PinArray[i, j].PointY = ValueCol;
}
}
}
}
}
}
}
namespace Quiz_4_9
{
class Triangle //三角形類別
{
//成員三點
public Point[] PointofTriangle = new Point[3];
public bool IsRight()
{
double s1 = PointofTriangle[0].DistanceTo(PointofTriangle[1]);
double s2 = PointofTriangle[1].DistanceTo(PointofTriangle[2]);
double s3 = PointofTriangle[0].DistanceTo(PointofTriangle[2]);
if ((s1 + s2 > s3) && (s2 + s3 > s1) && (s1 + s3 > s2))
return true;
else
return false;
}//判斷三角形是否合法
public double Preimeter()
{
double s1 = PointofTriangle[0].DistanceTo(PointofTriangle[1]);
double s2 = PointofTriangle[1].DistanceTo(PointofTriangle[2]);
double s3 = PointofTriangle[0].DistanceTo(PointofTriangle[2]);
return (s1 + s2 + s3);
}//周長
public double Area()
{
double s1 = PointofTriangle[0].DistanceTo(PointofTriangle[1]);
double s2 = PointofTriangle[1].DistanceTo(PointofTriangle[2]);
double s3 = PointofTriangle[2].DistanceTo(PointofTriangle[0]);
double s = (s1 + s2 + s3) / 2;
return Math.Sqrt(s * (s - s1) * (s - s2) * (s - s3));
}//面積
public double RadiusOfCircumcircle()
{
double a = PointofTriangle[0].DistanceTo(PointofTriangle[1]);
double b = PointofTriangle[1].DistanceTo(PointofTriangle[2]);
double c = PointofTriangle[2].DistanceTo(PointofTriangle[0]);
double cosAlpha = (b * b + c * c - a * a) / (2 * b * c);
double sinAlpha = Math.Sqrt(1 - cosAlpha * cosAlpha);
return (0.5 * a / sinAlpha);
}//外接圓半徑
}
}
namespace Quiz_4_9
{
public partial class Form1 : Form
{
private PinBoard board;
Triangle triangle;
Random rand;
public Form1()
{
InitializeComponent();
board = new PinBoard();
triangle = new Triangle();
rand = new Random();
}
//btn_GenerateTriangle功能創造PinArray
private void btn_GenerateTriangle_Click(object sender, EventArgs e)
{
if (txt_RowKeyin.Text != "" && txt_ColumnKeyin.Text != "" && txt_RowIntervalKeyin.Text != "" && txt_ColumnIntervalKeyin.Text != "")
{
//讀取txt
board.Row = Convert.ToInt16(txt_RowKeyin.Text);
board.Column = Convert.ToInt16(txt_ColumnKeyin.Text);
board.RowInterval = Convert.ToDouble(txt_RowIntervalKeyin.Text);
board.ColumnInterval = Convert.ToDouble(txt_ColumnIntervalKeyin.Text);
//創造PinBoard
board.CreatPinArray();
board.SetPointPostion();
PrintPoint();
}
else
MessageBox.Show("缺參數");
}
//亂數選擇三點作為三角形,並將三點塞進Triangle類別中,同時print出來
private void PrintPoint()
{
//亂數選點 && 塞進txt
txt_Point1Row.Text = rand.Next(board.Row).ToString();
txt_Point1Column.Text = rand.Next(board.Column).ToString();
txt_Point2Row.Text = rand.Next(board.Row).ToString();
txt_Point2Column.Text = rand.Next(board.Column).ToString();
txt_Point3Row.Text = rand.Next(board.Row).ToString();
txt_Point3Column.Text = rand.Next(board.Column).ToString();
//用選點結果,提出PinBoard點,並塞進Triangle類別
triangle.PointofTriangle[0] = board.PinArray[Convert.ToInt16(txt_Point1Row.Text), Convert.ToInt16(txt_Point1Column.Text)];
triangle.PointofTriangle[1] = board.PinArray[Convert.ToInt16(txt_Point2Row.Text), Convert.ToInt16(txt_Point2Column.Text)];
triangle.PointofTriangle[2] = board.PinArray[Convert.ToInt16(txt_Point3Row.Text), Convert.ToInt16(txt_Point3Column.Text)];
//顯示三角形的三點
txt_Point1X.Text = triangle.PointofTriangle[0].PointX.ToString();
txt_Point1Y.Text = triangle.PointofTriangle[0].PointY.ToString();
txt_Point2X.Text = triangle.PointofTriangle[1].PointX.ToString();
txt_Point2Y.Text = triangle.PointofTriangle[1].PointY.ToString();
txt_Point3X.Text = triangle.PointofTriangle[2].PointX.ToString();
txt_Point3Y.Text = triangle.PointofTriangle[2].PointY.ToString();
}
//將Triangle類別中的數字提出來做運算,並放進txtbox裡。
private void btn_Calulate_Click(object sender, EventArgs e)
{
//判斷三點是否為空
if (txt_Point1X.Text != "" && txt_Point1Y.Text != "" && txt_Point2X.Text != "" &&
txt_Point2Y.Text != "" && txt_Point3X.Text != "" && txt_Point3Y.Text != "")
{//判斷手動輸入數字是否超過板子大小
if (Convert.ToInt16(txt_Point1Row.Text) < board.Row && Convert.ToInt16(txt_Point1Column.Text) < board.Column &&
Convert.ToInt16(txt_Point2Row.Text) < board.Row && Convert.ToInt16(txt_Point2Column.Text) < board.Column &&
Convert.ToInt16(txt_Point3Row.Text) < board.Row && Convert.ToInt16(txt_Point3Column.Text) < board.Column)
{
txt_ResultPrint.Text = "";
//為手動輸入所以必須再寫一次
triangle.PointofTriangle[0] = board.PinArray[Convert.ToInt16(txt_Point1Row.Text), Convert.ToInt16(txt_Point1Column.Text)];
triangle.PointofTriangle[1] = board.PinArray[Convert.ToInt16(txt_Point2Row.Text), Convert.ToInt16(txt_Point2Column.Text)];
triangle.PointofTriangle[2] = board.PinArray[Convert.ToInt16(txt_Point3Row.Text), Convert.ToInt16(txt_Point3Column.Text)];
if (triangle.IsRight() == true)
{
txt_ResultPrint.Text += "周長:";
txt_ResultPrint.Text += triangle.Preimeter().ToString() + Environment.NewLine;
txt_ResultPrint.Text += "面積:";
txt_ResultPrint.Text += triangle.Area().ToString() + Environment.NewLine;
txt_ResultPrint.Text += "外接圓半徑:";
txt_ResultPrint.Text += triangle.RadiusOfCircumcircle().ToString() + Environment.NewLine;
}
else
txt_ResultPrint.Text = "the triangle is illegal";
}
else
MessageBox.Show("輸入數字超過板子大小");
}
else
MessageBox.Show("缺參數");
}
}
}
沒有留言:
張貼留言