private Point calpointer(PictureBox pics, PictureBox picd)
{
Point pd = new Point(picd.Location.X + picd.Size.Width / 2, picd.Location.Y + picd.Size.Height / 2);
Point ps = new Point(pics.Location.X + pics.Size.Width / 2, pics.Location.Y + pics.Size.Height / 2);
Point p1 = new Point();
Point p2 = new Point();
float m = (float)(pd.Y - ps.Y) / (pd.X - ps.X);
float d1, d2;
float x1 = 0, x2 = 0, y1 = 0, y2 = 0;
if (ps.X == pd.X)
{
if (ps.Y > pd.Y)
return new Point(pd.X, picd.Location.Y + picd.Size.Height);
else
return new Point(pd.X, picd.Location.Y);
}
else if (ps.Y == pd.Y)
{
if (ps.X > pd.X)
return new Point(picd.Location.X + picd.Size.Width, pd.Y);
else
return new Point(picd.Location.X, pd.Y);
}
else if (ps.X <= pd.X && ps.Y <= pd.Y)
{
x1 = pd.X - picd.Size.Width / 2;
y1 = pd.Y - (picd.Size.Width / 2) * m;
if (m != 0)
x2 = pd.X - picd.Height / (2 * m);
else
x2 = pd.X;
y2 = pd.Y - picd.Height / 2;
}
else if (ps.X >= pd.X && ps.Y <= pd.Y)
{
x1 = pd.X + picd.Size.Width / 2;
y1 = pd.Y + (picd.Size.Width / 2) * m;
if (m != 0)
x2 = pd.X - picd.Height / (2 * m);
else
x2 = pd.X;
y2 = pd.Y - picd.Height / 2;
}
else if (ps.X >= pd.X && ps.Y >= pd.Y)
{
x1 = pd.X + picd.Size.Width / 2;
y1 = pd.Y + (picd.Size.Width / 2) * m;
if (m != 0)
x2 = pd.X + picd.Height / (2 * m);
else
x2 = pd.X;
y2 = pd.Y + picd.Height / 2;
}
else if (ps.X <= pd.X && ps.Y >= pd.Y)
{
x1 = pd.X - picd.Size.Width / 2;
y1 = pd.Y - (picd.Size.Width / 2) * m;
if (m != 0)
x2 = pd.X + picd.Height / (2 * m);
else
x2 = pd.X;
y2 = pd.Y + picd.Height / 2;
}
p1.X = (int)x1;
p1.Y = (int)y1;
p2.X = (int)x2;
p2.Y = (int)y2;
d1 = (p1.X - pd.X) * (p1.X - pd.X) + (p1.Y - pd.Y) * (p1.Y - pd.Y);
d2 = (p2.X - pd.X) * (p2.X - pd.X) + (p2.Y - pd.Y) * (p2.Y - pd.Y);
if (d1 > d2)
return p2;
else
return p1;
}
沒有留言:
張貼留言