已经知道CPoint 的3个点的CArray数组,怎么插入平均坐标点

时间:2022-10-31 22:03:16
CArray<CPoint,CPoint> pt



point1={50,50}
point2={250,200}
point3={465,410}

pt.Add(point1)
pt.Add(point2)
pt.Add(point3)

然后怎么在1和2之间插入平均点,然后再在2和3之间插入平均点。
从3个点增加到5个,7个,9个,13个......

14 个解决方案

#1


pt.InsertAt(1,point2_3); 

#2


你问题不是很清楚,但是我感觉你的意思是要求两个坐标的中心点,然后一直求相邻两个做坐标的中心点。
如果是的话,我觉得用递归就可以实现(伪代码):
test(x,y)
{
int a;
x,y 的平均点(a);
test(x,a);
}

#3


avg0=0
avg1=d1
avg2=(avg1+d2)/2
avg3=(avg2*2+d3)/3
avg4=(avg3*3+d4)/4
...
avg n=(avg n-1*(n-1)+dn)/n

#4


引用 3 楼 zhao4zhong1 的回复:
avg0=0
avg1=d1
avg2=(avg1+d2)/2
avg3=(avg2*2+d3)/3
avg4=(avg3*3+d4)/4
...
avgn=(avgn-1*(n-1)+dn)/n

不要只给代码不给解释

#5


引用 2 楼 shiguojie19892 的回复:
你问题不是很清楚,但是我感觉你的意思是要求两个坐标的中心点,然后一直求相邻两个做坐标的中心点。
如果是的话,我觉得用递归就可以实现(伪代码):
test(x,y)
{
int a;
x,y 的平均点(a);
test(x,a);
}



是为了填补鼠标检测 MOUSEMOVE的不足而增加的算法。因为mousemove只是按照一定的时间间隔来获取坐标的,我不爽这方法。

#6


3楼给出了根据第n-1个平均值和第n个数据计算第n个平均值的方法。

#7


引用 6 楼 zhao4zhong1 的回复:
3楼给出了根据第n-1个平均值和第n个数据计算第n个平均值的方法。

写成循环比较好,这应该怎么写

#8


引用 7 楼 nabasasun 的回复:
引用 6 楼 zhao4zhong1 的回复:3楼给出了根据第n-1个平均值和第n个数据计算第n个平均值的方法。
写成循环比较好,这应该怎么写

循环就是只能递归了。除非你用高级算法那就是微积分方面的了。爱莫能助

#9


好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以

#10


引用 9 楼 regainworld 的回复:
好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以

我给出3点,并不表示一个鼠标画过去就只有3个点

#11


引用 10 楼 nabasasun 的回复:
引用 9 楼 regainworld 的回复:好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以
我给出3点,并不表示一个鼠标画过去就只有3个点


没啥区别,你给出50个点,每相邻三个点做拉格朗日插值,循环毫无压力

#12


引用 11 楼 regainworld 的回复:
引用 10 楼 nabasasun 的回复:引用 9 楼 regainworld 的回复:好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以
我给出3点,并不表示一个鼠标画过去就只有3个……


我不知道哪个例子的代码MFC可以用

#13


对每个点的x,y坐标用3楼的递推公式每加入一个新点即可计算出新的x,y

#14


新的平均坐标x,y

#1


pt.InsertAt(1,point2_3); 

#2


你问题不是很清楚,但是我感觉你的意思是要求两个坐标的中心点,然后一直求相邻两个做坐标的中心点。
如果是的话,我觉得用递归就可以实现(伪代码):
test(x,y)
{
int a;
x,y 的平均点(a);
test(x,a);
}

#3


avg0=0
avg1=d1
avg2=(avg1+d2)/2
avg3=(avg2*2+d3)/3
avg4=(avg3*3+d4)/4
...
avg n=(avg n-1*(n-1)+dn)/n

#4


引用 3 楼 zhao4zhong1 的回复:
avg0=0
avg1=d1
avg2=(avg1+d2)/2
avg3=(avg2*2+d3)/3
avg4=(avg3*3+d4)/4
...
avgn=(avgn-1*(n-1)+dn)/n

不要只给代码不给解释

#5


引用 2 楼 shiguojie19892 的回复:
你问题不是很清楚,但是我感觉你的意思是要求两个坐标的中心点,然后一直求相邻两个做坐标的中心点。
如果是的话,我觉得用递归就可以实现(伪代码):
test(x,y)
{
int a;
x,y 的平均点(a);
test(x,a);
}



是为了填补鼠标检测 MOUSEMOVE的不足而增加的算法。因为mousemove只是按照一定的时间间隔来获取坐标的,我不爽这方法。

#6


3楼给出了根据第n-1个平均值和第n个数据计算第n个平均值的方法。

#7


引用 6 楼 zhao4zhong1 的回复:
3楼给出了根据第n-1个平均值和第n个数据计算第n个平均值的方法。

写成循环比较好,这应该怎么写

#8


引用 7 楼 nabasasun 的回复:
引用 6 楼 zhao4zhong1 的回复:3楼给出了根据第n-1个平均值和第n个数据计算第n个平均值的方法。
写成循环比较好,这应该怎么写

循环就是只能递归了。除非你用高级算法那就是微积分方面的了。爱莫能助

#9


好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以

#10


引用 9 楼 regainworld 的回复:
好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以

我给出3点,并不表示一个鼠标画过去就只有3个点

#11


引用 10 楼 nabasasun 的回复:
引用 9 楼 regainworld 的回复:好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以
我给出3点,并不表示一个鼠标画过去就只有3个点


没啥区别,你给出50个点,每相邻三个点做拉格朗日插值,循环毫无压力

#12


引用 11 楼 regainworld 的回复:
引用 10 楼 nabasasun 的回复:引用 9 楼 regainworld 的回复:好像应该用拉格朗日三点插值
楼主的插值方法只能得到两条线段,3楼给出的是三个点的几何中心点,跟楼主需求相去甚远

如果用拉格朗日插值法,只要输入(p2-p1)的1/2,1/4,3/4,等等,就可以直接得到插值点坐标,for循环足以
我给出3点,并不表示一个鼠标画过去就只有3个……


我不知道哪个例子的代码MFC可以用

#13


对每个点的x,y坐标用3楼的递推公式每加入一个新点即可计算出新的x,y

#14


新的平均坐标x,y