该方法获得2个point(此2个point组成原的直径), 以及一个int数量(此数量必须为大于12的能被4整除的数) 然后返回一个point数组或者IList<point>
返回的值具备以下条件其所有的point都在圆的边上,如果传递的参数为12,那么返回12个点,由12个点依次连线得到一个近似于原的一个多边形
public IList<point> getList(point x, point y, int num)
{
return null;
}
该方法获得2个point(此2个point组成原的直径), 以及一个int数量(此数量必须为大于12的能被4整除的数) 然后返回一个point数组或者IList<point>
返回的值具备以下条件其所有的point都在圆的边上,如果传递的参数为12,那么返回12个点,由12个点依次连线得到一个近似于原的一个多边形
public IList<point> getList(point x, point y, int num)
{
return null;
}
private void button2_Click(object sender, EventArgs e)
{
Point p1 = new Point(150, 100);
Point p2 = new Point(100, 200);
GetPointList(p1, p2, 24);
}
public Point[] GetPointList(Point p1, Point p2, int num)
{
Graphics g = Graphics.FromHwnd(panel1.Handle);
Pen penLine = new Pen(SystemBrushes.ActiveCaption);
g.DrawLine(penLine,p1,p2);
Pen penBorder = new Pen(SystemBrushes.GrayText);
// 取中心点
int centerX = Math.Min(p1.X, p2.X) + Math.Abs(p2.X - p1.X) / 2;
int centery = Math.Min(p1.Y, p2.Y) + Math.Abs(p2.Y - p1.Y) / 2;
// 直径
double doubleR = Math.Sqrt((p2.X - p1.X) * (p2.X - p1.X) + (p2.Y - p1.Y) * (p2.Y - p1.Y));
// 半径
double doubler = doubleR/2;
int intr = Convert.ToInt32(doubler);
double single = (Math.PI / 180) * (360 / num);
Point pointCenter = new Point(centerX,centery);
Point[] point = new Point[num];
for (int i = 1; i <= num; i++)
{
point[i - 1] = new Point(
centerX - (int)(intr * Math.Sin(single * i))
, centery - (int)(intr * Math.Cos(single * i)));
g.DrawLine(penBorder
, pointCenter
, point[i - 1]);
}
return point;
}