2015年4月11日 星期六

[2015][Quiz][Week07]Quiz04-40173008H

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Quiz4
{
    public partial class pinboard : Form
    {
        PinBoard board = new PinBoard(); //建立板子
        
        public pinboard()
        {

            InitializeComponent();
        }

        private void btn_calculate_Click(object sender, EventArgs e)
        {


            Triangle tri = new Triangle();
            int[] row = new int[3];
            int[] col = new int[3];
            col[0] = int.Parse(txtCol1.Text);
            row[0] = int.Parse(txtRow1.Text);
            col[1] = int.Parse(txtCol2.Text);
            row[1] = int.Parse(txtRow2.Text);
            col[2] = int.Parse(txtCol3.Text);
            row[2] = int.Parse(txtRow3.Text);
            for (int i = 0; i <= 2; i++)
            {
                tri.pointArray[i] = board.pinArray[row[i], col[i]];
            }
            board.SetPinsPosition();
            txtX1.Text = tri.pointArray[0].xCoordinate.ToString();
            txtY1.Text = tri.pointArray[0].yCoordinate.ToString();
            txtX2.Text = tri.pointArray[1].xCoordinate.ToString();
            txtY2.Text = tri.pointArray[1].yCoordinate.ToString();
            txtX3.Text = tri.pointArray[2].xCoordinate.ToString();
            txtY3.Text = tri.pointArray[2].yCoordinate.ToString();
            if (!tri.ConditionsOfTriangle())
                txt_Display.AppendText("以上三點無法構成三角形,重新產生三點\n");
            double Perimeter=tri.Perimeter();
            txt_Display.AppendText(DisplayStringPerimeter(Perimeter));

            double Area = tri.Area();
            txt_Display.AppendText(DisplayStringArea(Area));


            double radius = tri.RadiusOfCircumcircle();
            txt_Display.AppendText(DisplayStringradius(radius));

        }

        private string DisplayStringValue(double Value)
        {
            string StrDisplay = "";
            StrDisplay += Value;
            StrDisplay += "\n";
            return StrDisplay;
        }
        private string DisplayStringPerimeter(double Perimeter) 
        {
            string StrDisplay = "";
            StrDisplay += "周長";
            StrDisplay += Perimeter;
            StrDisplay += "\n";
            return StrDisplay;
        }
        private string DisplayStringArea(double Area)
        {
            string StrDisplay = "";
            StrDisplay += "面積";
            StrDisplay += Area;
            StrDisplay += "\n";
            return StrDisplay;
        }
        private string DisplayStringradius(double radius)
        {
            string StrDisplay = "";
            StrDisplay += "外接圓半徑";
            StrDisplay += radius;
            StrDisplay += "\n";
            return StrDisplay;
        }



        private void button1_Click(object sender, EventArgs e)
        {
            board.rows = int.Parse(txt_rows.Text);
            board.cols = int.Parse(txt_cols.Text);
            board.rowInterval = double.Parse(txt_rowInterval.Text);
            board.colInterval = double.Parse(txt_colInterval.Text);
            Triangle tri = new Triangle();   //建立三角形
            Random rand = new Random();      //產生亂數
            board.CreatePins();

            int[] row = new int[3];
            int[] col = new int[3];
            for(int i=0;i<=2;i++)
            {
                row[i] = rand.Next(board.rows); 
                col[i] = rand.Next(board.cols);
                tri.pointArray[i] = board.pinArray[row[i], col[i]];

            }


            txtCol1.Text = col[0].ToString();
            txtRow1.Text = row[0].ToString();
            txtCol2.Text = col[1].ToString();
            txtRow2.Text = row[1].ToString();
            txtCol3.Text = col[2].ToString();
            txtRow3.Text = row[2].ToString(); 

            board.SetPinsPosition();
            txtX1.Text=tri.pointArray[0].xCoordinate.ToString();
            txtY1.Text=tri.pointArray[0].yCoordinate.ToString();
            txtX2.Text=tri.pointArray[1].xCoordinate.ToString();
            txtY2.Text=tri.pointArray[1].yCoordinate.ToString();
            txtX3.Text=tri.pointArray[2].xCoordinate.ToString();
            txtY3.Text=tri.pointArray[2].yCoordinate.ToString();
            if (!tri.ConditionsOfTriangle())
                txt_Display.AppendText("以上三點無法構成三角形,重新產生三點\n");
            


        }





 



    }
}

Point

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Quiz4
{
    class Point
    {
        public double xCoordinate;
        public double yCoordinate;

        public double DistanceBetweenTwoPoints(Point pin) //計算該點和某點之間的距離
        {
            double Distance = Math.Sqrt(Math.Pow((pin.xCoordinate - this.xCoordinate), 2) + Math.Pow((pin.yCoordinate - this.yCoordinate), 2));
            return Distance;
        }
    }
}


PinBoard
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Quiz4
{
    class PinBoard
    {
        public int rows = 0;
        public int cols = 0;
        public Double rowInterval = 0;
        public Double colInterval = 0;
        public Point[,] pinArray = null;

        public void CreatePins() //產生矩陣各點之位置
        {
            pinArray = new Point[rows, cols];
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    pinArray[i, j] = new Point();

                }
            }
        }

        public void SetPinsPosition() //依行列間距計算出各點x.y之座標
        {
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    pinArray[i, j].yCoordinate = (i * rowInterval);
                    pinArray[i, j].xCoordinate = (j * colInterval);
                }
            }
        }
    }
}

Triangle
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Quiz4
{
    class Triangle
    {
        public Point[] pointArray = new Point[3]; //建立三角形的三個點

        public bool ConditionsOfTriangle()//判斷是否符合構成三角形的條件
        {
            double lengthA = pointArray[0].DistanceBetweenTwoPoints(pointArray[1]);
            double lengthB = pointArray[1].DistanceBetweenTwoPoints(pointArray[2]);
            double lengthC = pointArray[2].DistanceBetweenTwoPoints(pointArray[0]);
            double temp = 0;


            while (true)
            {
                if (lengthB > lengthA) //將lengthA變為最長邊
                {
                    temp = lengthB;
                    lengthB = lengthA;
                    lengthA = temp;
                }
                else if (lengthC > lengthB)//lengthC變為最短邊
                {
                    temp = lengthC;
                    lengthC = lengthB;
                    lengthB = temp;
                }
                else
                {
                    break;
                }
            }
            if (lengthA < (lengthB + lengthC)) //三角形兩邊和大於第三邊
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public double Perimeter() //計算三角形的周長
        {
            //由DistanceTo()計算兩點間的距離算出三角形三邊之邊長
            double lengthA = pointArray[0].DistanceBetweenTwoPoints(pointArray[1]); 
            double lengthB = pointArray[1].DistanceBetweenTwoPoints(pointArray[2]);
            double lengthC = pointArray[2].DistanceBetweenTwoPoints(pointArray[0]);

            double Perimeter = lengthA + lengthB + lengthC; 
            return Perimeter;
        }

        public double Area()
        {
            double lengthA = pointArray[0].DistanceBetweenTwoPoints(pointArray[1]); 
            double lengthB = pointArray[1].DistanceBetweenTwoPoints(pointArray[2]); 
            double lengthC = pointArray[2].DistanceBetweenTwoPoints(pointArray[0]);

            double Perimeter = lengthA + lengthB + lengthC; 
            //以海龍公式計算三角形面積
            double Area = Math.Sqrt((0.5 * Perimeter) * (0.5 * Perimeter - lengthA) * (0.5 * Perimeter - lengthB) * (0.5 * Perimeter - lengthC));
            return Area;
        }

               public double RadiusOfCircumcircle()
        {
            double lengthA = pointArray[0].DistanceBetweenTwoPoints(pointArray[1]); 
            double lengthB = pointArray[1].DistanceBetweenTwoPoints(pointArray[2]); 
            double lengthC = pointArray[2].DistanceBetweenTwoPoints(pointArray[0]);

            //由餘弦公式計算出角A之餘弦值
            double cosA = (lengthB * lengthB + lengthC * lengthC - lengthA * lengthA) / (2 * lengthB * lengthC);
            double sinA = Math.Sqrt(1 - cosA * cosA);
            //求得外接圓半徑
            double radius = 0.5 * lengthA / sinA; 
            return radius;
        }
    }
}

Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Quiz4
{
    static class Program
    {
        /// 
        /// 應用程式的主要進入點。
        /// 
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new pinboard());
        }
    }
}

沒有留言:

張貼留言