List<Point> contour6 = new List<Point>();//每旋转1度后的轮廓,
private void buttonMinRect_Click(object sender, EventArgs e)//轮廓旋转90度,找出最小矩形面积
{
long minmianji = 666666666; int Recjiaodu = 0;
if (maxblobindex != -1)//&&llp.Count!=0)
{
double x2 = 0;
double y2 = 0;
double m_CenterX = masscentre[maxblobindex].X;
double m_CenterY = masscentre[maxblobindex].Y;
for (int du = 0; du < 90; du++)
{
contour6 = new List<Point>();
double theta = du;//0-90
theta = 3.1415926 * theta / 180.0;
for (int i = 0; i < singlefigure.Count; i++)
{
x2 = (singlefigure[i].X - m_CenterX) * Math.Cos(theta) + (singlefigure[i].Y - m_CenterY) * Math.Sin(theta);//即就是x0,y0-cx,cy
y2 = (singlefigure[i].Y - m_CenterY) * Math.Cos(theta) - (singlefigure[i].X - m_CenterX) * Math.Sin(theta);//即就是用完之后,x1,y1+cx,xy
x2 += m_CenterX;
y2 += m_CenterY;
contour6.Add(new Point((int)x2, (int)y2));
}
List<float> arr = new List<float>();
for (int i = 0; i < contour6.Count; i++)
{
arr.Add(contour6[i].X);
}
// 以上四个x,找出最大和最小,画出两条线;
float min = arr[0]; float max = arr[0];
for (int i = 0; i < arr.Count; i++)
{
if (min > arr[i])
{
min = arr[i];
}
if (max < arr[i])
{
max = arr[i];
}
}
int ww = (int)Math.Abs(max - min);//两个x值
// 同样四个y,找出最大和最小,画出两条线;
arr = new List<float>();
for (int i = 0; i < contour6.Count; i++)
{
arr.Add(contour6[i].Y);
}
float min1 = arr[0]; float max1 = arr[0];
for (int i = 0; i < arr.Count; i++)
{
if (min1 > arr[i])
{
min1 = arr[i];
}
if (max1 < arr[i])
{
max1 = arr[i];
}
}
int hhh = (int)Math.Abs(max1 - min1);//两个y值//左顶(min,min1)及右底(max,max1)
long temp = ww * hhh;
if (temp < minmianji)
{
minmianji = temp;
Recjiaodu = du;
}
}
textBox6.Text = "";
textBox6.Text = (minmianji).ToString();
textBox5.Text = "";
textBox5.Text = (Recjiaodu).ToString();
}
}