我在c#中编写了一个示例程序,在页面中绘制了一些点 我用计算点的距离设定中心点 但是怎样才能找到距离中心点最远的距离? 示例代码:
void draw(string label,float x,float y)
{
Graphics g = panel1.CreateGraphics();
Pen p = new Pen(Color.YellowGreen, 5);
Random randomGen = new Random(Convert.ToInt32(label));
KnownColor[] names = (KnownColor[])Enum.GetValues(typeof(KnownColor));
KnownColor randomColorName = names[randomGen.Next(names.Length)];
Color randomColor = Color.FromKnownColor(randomColorName);
SolidBrush s = new SolidBrush(randomColor);
g.FillEllipse(s, x * 1, y * 1, 10, 10);
}
答案 0 :(得分:1)
我能想到的解决这个问题的最好和最简单的方法是:
1)水平和垂直扫描图像/坐标系
2)对于每个行/列,存储具有非零强度的最低和最高坐标
这将是你的边界点
答案 1 :(得分:0)
您可以定义角度的最远点。这可以解决凸壳的问题,但这种技术只适用于圆形空间,非常像你的。
对于每个角度,您必须找到最远点,然后为其指定红色。 您可以根据需要使用尽可能多的角度。
...伪
npoints = 10;
furthestPts = zeros(npoints );//Initialize vectors with 0
distances = zeros(npoints );
for each pt in points
angle = atan((pt.y - c.y)/pt.x - c.x) * 360 / ( 2 * pi); //degres
angle = (int) (angle/npoints); //we will have only 10 points separated by 36 degrees
d = distance(pt,center);
if(distances[angle] < d){
distances[angle] = d; //Updating furthest point
furthestPts.[angle] = (pt); //Updating furthest point
}
如果点远离中心或者点相距很远,你会发现这个算法有一些问题。