在我得到这种方法之前的问题:
private static List<PointF> ExtendPoints(
PointF pt1,
PointF pt4,
int numberOfPoints)
{
extendedPoints.Add(pt1);
for (double d = 1; d < numberOfPoints - 1; d++)
{
double a = (Math.Max(pt1.X, pt4.X) - Math.Min(pt1.X, pt4.X)) * d / (double)(numberOfPoints - 1) + Math.Min(pt1.X, pt4.X);
double b = (Math.Max(pt1.Y, pt4.Y) - Math.Min(pt1.Y, pt4.Y)) * d / (double)(numberOfPoints - 1) + Math.Min(pt1.Y, pt4.Y);
var pt2 = new PointF((float)a, (float)b);
extendedPoints.Add(pt2);
}
extendedPoints.Add(pt4);
return extendedPoints;
}
但结果不对。
这就是我使用该方法的方法:
for (int i = 1; i < clouds.Count; i++)
{
extendedPoints = ExtendPoints(clouds[i - 1], clouds[i], 2);
}
clouds
和extendedPoints
都是List<PointF>
类型。
方法中的公式应为:(n-1)*m + n
。
例如:
假设clouds
列表的长度为2
。
我有clouds
两点:
Index 0: X = 120 Y = 125
Index 1: X = 130 Y = 135
现在方法得到两个点和数字2意味着该方法应该在每两个给定点之间植入另外两点:
所以现在extendedPoints
应该是例如:
Index 0: X = 120 Y = 125
Index 1: X = 126 Y = 127
Index 2: X = 128 Y = 129
Index 3: X = 130 Y = 135
现在我们可以说列表clouds
的长度为3
,因此该方法每次获得两个点并在它们之间植入新的2个点:
所以我们现在说clouds
包含3
点:
Index 0: X = 100 Y = 125
Index 1: X = 130 Y = 147
Index 2: X = 150 Y = 160
因此,在索引0
和索引1
之间,该方法会植入2
个点,所以现在它是4
。
然后在索引1
和索引2
之间,该方法植入另一个新的两点。
因此,extendedPoints
一起应包含7
点。
就像公式:
(n-1)*m + n
n
是原始列表clouds
的长度。 m
是方法应在两点之间植入的点数。
如果clouds
有5
分,那么(5-1)*2 + 5 = 13
如果clouds
包含10
点:(10-1)* 2 + 10 = 28
现在我该如何在方法中实现这个?
规则:
pt1
然后保留两个新点,最后保持pt4
。(n-1)*m + n
该方法现在的方式是没有给出正确的结果。例如,如果clouds
包含2
点且该方法应创建2
个新点,则列表extendedPoints
应包含4
个点:
(2-1)*2 + 2 = 4
但我得到2
分,extendedPoints
仅包含2
分。那是错的!
如何使用公式实现它?
更多解释:
如果我给出两点:第一次迭代pt1
和pt4
然后在它们之间植入两个新点。
在第一次迭代中,pt1
包含在clouds
索引0
中,pt4
位于clouds
索引1
。
在下一次迭代中,pt1
应位于索引clouds
的{{1}}和索引1
的{{1}},并在它们之间植入两个新点。< / p>
接着是下一次迭代,pt4
位于索引2
,pt1
位于索引2
。
依此类推,具体取决于pt4
列表长度。
将点添加到列表时,该方法应始终先添加3
,然后再添加两个新点,然后clouds
。
答案 0 :(得分:2)
你说:
现在方法得到两个点,数字2表示方法应该在每两个给定点之间实现另外两个点
然而,您的循环条件表明,对于您生成的m
点之间的m-2
:
for (double d = 1; d < numberOfPoints - 1; d++)
如果对于m = 2
您希望生成两个点,则应显示为:
for (double d = 1; d <= numberOfPoints; d++)
在循环内部,您应该使用d
而不是(double)(numberOfPoints + 1)
来扩展(double)(numberOfPoints - 1)
。