2 回答

TA贡献1765条经验 获得超5个赞
是我理解有问题?我怎么不明白你想问什么?
上面一堆数和你的文字什么关系? 1与2的距离S=1? 再拿1和80*n、80*(n+1)比较?
最后一行数什么?80*1、80*12?比较之后呢?没了?

TA贡献1797条经验 获得超6个赞
1、你的NC1、NC2.....都是点坐标把?
2、你的规则显然不行,我将按照以下规则插点
80 <= S < 80*2,插1个点
80*2 <= S < 80*3,插2个点
80*3 <= S < 80*4,插3个点
.......
struct MyPoint
{
public double X;
public double Y;
public MyPoint(double x, double y)
{
X = x;
Y = y;
}
}
public double Distance(MyPoint p1,MyPoint p2)
{
double x = Math.Pow(p1.X - p2.X, 2);
double y = Math.Pow(p1.Y - p2.Y, 2);
return Math.Sqrt(x + y);
}
public Point[] Insert (MyPoint p1, MyPoint p2, int count)
{
if (count <= 0)
return null;
MyPoint[] NClist = new MyPoint[count];
//count表示要插入多少个点,用p1、p2表示要在哪两个点之间插点。
//在p1、p2间插入count个点,就要把p1、p2间等分成count+1段
double x = Math.Abs(p1.X - p2.X) / (count + 1);
double y = Math.Abs(p1.Y - p2.Y) / (count + 1);
for (int i = 1; i < count; i++)
{
//i=0时,是p1点,所以从i=1开始循环;
//若要在NClist里包含p1、p2,修改循环条件为 int i=0:i<=count;i++
NClist[i] = new MyPoint(p1.X + x * i, p1.Y + y * i);
}
return NClist;
}
//然后是等分内插算法
public void AVGInsert(MyPoint p1, MyPoint p2)
{
MyPoint[] NClist;
int local = 80;
int count = 0;
double distance = Distance(p1, p2);
if (distance < local)
return;
if (distance < local * 7)
{//小于7倍
if (distance < local * 4)
{//小于4倍
if (distance < local * 3)
{//小于3倍
if (distance < local * 2)
count = 1;//1--2
else
count = 2;//2--3
}
count = 3;//3--4
}
else
{//大于4倍
if (distance < local * 5)
count = 4;//4--5
else if (distance < local * 6)
count = 5;//5--6
else count = 6;//6--7
}
}
else
{//大于7倍
if (distance < local * 10)
{//小于10倍
if (distance < local * 8)
count = 7;//7--8
else if (distance < local * 9)
count = 8;//8--9
else count = 9;//9--10
}
else
{//大于10倍
if (distance < local * 11)
count = 10;//10--11
else count = 11;//11--12
}
}
NClist = Insert(p1, p2, count);
}
//我没测试过,你自己再检查一下逻辑。
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报