数组按条件分组

liangming1128 2011-03-28 05:47:56
在C#中存在这样的一些点1、2、3、4、5、6、7、8、9、10
1、先将这些相邻点之间的距离算出来,如果小于50,就将他们分到一个数组中

应怎样分组????怎样算??



求答案???
...全文
211 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine_fly 2011-03-28
  • 打赏
  • 举报
回复
liangming1128 2011-03-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rekym 的回复:]
int[] num={5,8,12,52,330,340,780,785}

list<int> newnum=new list<int>();

for(int i=0;i<num.length-1++)
{
if(num[i+1]-num[i]>50)
newnum.add(num[i+1]);
}
[/Quote]
这个算法有错误
liangming1128 2011-03-28
  • 打赏
  • 举报
回复
GPS图形中由于坐标点太多,因此将位置相近的点设为一个抄表点。对抄表点的分组算法暂定如下:在某一抄表段内,按照抄表顺序由小到大,如果某两点间距离大于一定值,则作为分割点。例如,某抄表段有10个电表,抄表顺序为1,2,3…9,10,如果第5点和第6点间的距离大于50m,则1-5为一个抄表点,6-10为一个抄表点。图形中只显示抄表点,不显示每个电表的位置。
liangming1128 2011-03-28
  • 打赏
  • 举报
回复
public Bitmap DrawMap(string jingDu1, string weiDu1)
{
int Lx = -1, Ly = -1;
double jingDu2 = Convert.ToDouble(jingDu1);
double weiDu2 = Convert.ToDouble(weiDu1);
Lx = Convert.ToInt32(jingDu2) / 200;
Ly = Convert.ToInt32(weiDu2) / 120;
string sqlstr4 = "select LONGITUDE,LATITUDE from t_mrdata ";
DataTable dt1 = dbexec.GetDataTable(sqlstr4, null);
Bitmap M = new Bitmap(320, 240);
Graphics ghs = Graphics.FromImage(M);
Pen myPen = new Pen(Color.Black, 1);
System.Drawing.Drawing2D.AdjustableArrowCap aac;
aac = new System.Drawing.Drawing2D.AdjustableArrowCap(3, 3);
myPen.CustomEndCap = aac;
int n = dt1.Rows.Count;
float sum1 = 0, sum2 = 0;
int k=1;int count=0,m=0;
Point[] MapPoints = new Point[n];
Point[] MapPoints4 = new Point[n];
Point[] MapPoints2 = new Point[n];
Point[] MapPoints3 = new Point[n];
List <float> add=new List<float>();
Point p2;

for (int i = 0; i <= dt1.Rows.Count - 1; i++)
{
if (dt1.Rows[i][0] != DBNull.Value || dt1.Rows[i][1] != DBNull.Value)
{
string a = dt1.Rows[i][0].ToString();
string b = dt1.Rows[i][1].ToString();

if (a != String.Empty && b != String.Empty)
{
double jingDu = Convert.ToDouble(a);
double weiDu = Convert.ToDouble(b);
p2 = new Point(Convert.ToInt32(jingDu), Convert.ToInt32(weiDu));
MapPoints2[i] = p2;
int a1 = Convert.ToInt32(jingDu) / 200;
int a2 = Convert.ToInt32(weiDu) / 120;
Point p1 = new Point(a1, a2);
MapPoints[i] = p1;
}
else
{

p2 = new Point(-100000, -100000);

MapPoints2[i] = p2;
}
}
}

//判断相邻点之间的距离小于50
for (int i = 0; i < MapPoints2.Length ; i++)
{


double distance = (MapPoints2[i + 1].X - MapPoints2[i].X) * (MapPoints2[i + 1].X - MapPoints2[i].X) + (MapPoints2[i + 1].Y - MapPoints2[i].Y) * (MapPoints2[i + 1].Y - MapPoints2[i].Y);

if (Math.Sqrt(distance) <= 50)
{

Point p3 = new Point(MapPoints2[i].X, MapPoints2[i].Y);

MapPoints3[k] = p3;

k++;

}
else
{

for (int t = 0; t < MapPoints3.Length; t++)
{
sum1 = +MapPoints3[i].X;
sum2 = +MapPoints3[i].Y;
count++;
}
Point p1 = new Point(Convert.ToInt32(sum1 / count / 200), Convert.ToInt32(sum2 / count / 120));


MapPoints[m] = p1;
m++;

k = 0; count = 0;

sum1 = 0; sum2 = 0;

}


}



//画点

for (int j = 0; j < MapPoints.Length; j++)
{



ghs.FillEllipse(new SolidBrush(Color.Red), MapPoints[j].X, MapPoints[j].Y, 8, 8);



}
//画线
for (int j = 0; j < MapPoints.Length - 1; j++)
{


ghs.DrawLine(myPen, MapPoints[j], MapPoints[j + 1]);


}


return M;
}
测试数据:经度、纬度(200,120)、(200,120)、(300,120)、(300,120)…………这样的点很多
eclipse_xu 2011-03-28
  • 打赏
  • 举报
回复
可不可以重载下+运算符 然后判断result的大小?
rekym 2011-03-28
  • 打赏
  • 举报
回复
int[] num={5,8,12,52,330,340,780,785}

list<int> newnum=new list<int>();

for(int i=0;i<num.length-1++)
{
if(num[i+1]-num[i]>50)
newnum.add(num[i+1]);
}
636f6c696e 2011-03-28
  • 打赏
  • 举报
回复
题目有歧义。
不管怎么样,一个循环搞定

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧