PinBoard
public class PinBoard
{
public int rows ;
public int cols;
public double xInterval;
public double yInterval;
public MyPoint[,] PinArray = null;
public PinBoard(int row,int col,double deltaX,double deltaY)
{
rows = row ;
cols = col;
xInterval = deltaX;
yInterval = deltaY;
}
public void createPins()
{
PinArray=new MyPoint[rows ,cols];
for (int i = 0; i < rows ; i++)
for (int j = 0; j < cols; j++)
PinArray[i, j] = new MyPoint();
}
public void setPinsPositions()
{
for(int i=0 ; i < rows ; i++)
for(int j=0 ; j < cols ; j++)
{
PinArray[i, j].x = xInterval * j;
PinArray[i, j].y = yInterval * i;
}
}
}
Point
public class MyPoint
{
public double x;
public double y;
public double distanceTo(MyPoint p)
{
return (Math.Sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)));
}
}
Triangle
public class triangle
{
public MyPoint[] PointArray = new MyPoint[3];
public triangle(MyPoint p1,MyPoint p2,MyPoint p3)
{
PointArray[0] = p1;
PointArray[1] = p2;
PointArray[2] = p3;
}
public double distanceBetweenPoints(double x1,double y1,double x2,double y2)
{
return((Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))));
}
public void setPointArray(MyPoint[] pArray)
{
for (int i = 0; i < 3; i++)
pArray[i] = new MyPoint();
}
public double perimeter()
{
double s1 = PointArray[0].distanceTo(PointArray[1]);
double s2 = PointArray[1].distanceTo(PointArray[2]);
double s3 = PointArray[2].distanceTo(PointArray[0]);
return s1 + s2 + s3;
}
public double area()
{
double s1 = PointArray[0].distanceTo(PointArray[1]);
double s2 = PointArray[1].distanceTo(PointArray[2]);
double s3 = PointArray[2].distanceTo(PointArray[0]);
double s = (s1 + s2 + s3) / 2;
return(Math.Sqrt(s*(s-s1)*(s-s2)*(s-s3)));
}
public bool isValid()
{
double s1 = PointArray[0].distanceTo(PointArray[1]);
double s2 = PointArray[1].distanceTo(PointArray[2]);
double s3 = PointArray[2].distanceTo(PointArray[0]);
return ((s1 + s2 > s3) || (s3 + s2 > s1) || (s1 + s3 > s2));
}
public double radiusOfCircle()
{
double a = PointArray[0].distanceTo(PointArray[1]);
double b = PointArray[1].distanceTo(PointArray[2]);
double c = PointArray[2].distanceTo(PointArray[0]);
double cosa=(b*b+c*c-a*a)/(2*b*c);
double sina=Math.Sqrt(1-cosa*cosa);
return 0.5*a/sina;
}
}
Forms
public partial class Form1 : Form
{
public String mess;
public PinBoard MyBoard;
public triangle tri;
public Random rnd=new Random();
public Form1()
{
InitializeComponent();
}
private void btnGenerate_Click(object sender, EventArgs e)
{
MyBoard = new PinBoard(Convert.ToInt32(txtRow.Text), Convert.ToInt32(txtColumn.Text),Convert.ToDouble( txtXinterval.Text),Convert.ToDouble( txtYinterval.Text));
MyBoard.createPins();
MyBoard.setPinsPositions();
txtP1Col.Text = rnd.Next( Convert.ToInt32(txtColumn.Text)).ToString();
txtP2Col.Text = rnd.Next(Convert.ToInt32(txtColumn.Text)).ToString();
txtP3Col.Text = rnd.Next(Convert.ToInt32(txtColumn.Text)).ToString();
txtP1Row.Text = rnd.Next(Convert.ToInt32(txtRow.Text)).ToString();
txtP2Row.Text = rnd.Next(Convert.ToInt32(txtRow.Text)).ToString();
txtP3Row.Text = rnd.Next(Convert.ToInt32(txtRow.Text)).ToString();
txtP1X.Text = (Convert.ToInt32(txtP1Col.Text) * MyBoard.xInterval).ToString();
txtP2X.Text = (Convert.ToInt32(txtP2Col.Text) * MyBoard.xInterval).ToString();
txtP3X.Text = (Convert.ToInt32(txtP3Col.Text) * MyBoard.xInterval).ToString();
txtP1Y.Text = (Convert.ToInt32(txtP1Row.Text) * MyBoard.yInterval).ToString();
txtP2Y.Text = (Convert.ToInt32(txtP2Row.Text) * MyBoard.yInterval).ToString();
txtP3Y.Text = (Convert.ToInt32(txtP3Row.Text) * MyBoard.yInterval).ToString();
}
private void btnCalculate_Click(object sender, EventArgs e)
{
MyPoint P1=new MyPoint();
MyPoint P2 = new MyPoint();
MyPoint P3 = new MyPoint();
P1.x = Convert.ToDouble(txtP1X.Text);
P1.y = Convert.ToDouble(txtP1Y.Text);
P2.x = Convert.ToDouble(txtP2X.Text);
P2.y = Convert.ToDouble(txtP2Y.Text);
P3.x = Convert.ToDouble(txtP3X.Text);
P3.y = Convert.ToDouble(txtP3Y.Text);
tri = new triangle(P1,P2,P3);
mess+=Environment.NewLine;
mess += "周長是:";
mess += tri.perimeter().ToString();
mess += (Environment.NewLine+"面積是:");
mess += tri.area().ToString();
mess += Environment.NewLine+"外接圓半徑是:";
mess += tri.radiusOfCircle().ToString();
txtDisplay.Text = mess;
}
}
沒有留言:
張貼留言