该方法得到两个点并返回一个30点的List。 当我在绘画事件中显示点数时,我会看到一个大圆点。 我想显示这些点不是圆形而是像......那样的线顺序...... 。 。 。像这样
在课程的顶部我正在做:
point1 = new Point(80, 80);
point2 = new Point(280, 300);
extendedPoints = ExtendPoints(point1, point2);
起初我这样做了:
private static List<PointF> ExtendPoints(PointF pt1, PointF pt4)
{
extendedPoints.Add(pt1);
float x = (Math.Max(pt1.X, pt4.X) - Math.Min(pt1.X, pt4.X)) / 2 + Math.Min(pt1.X, pt4.X);
float y = (Math.Max(pt1.Y, pt4.Y) - Math.Min(pt1.Y, pt4.Y)) / 2 + Math.Min(pt1.Y, pt4.Y);
var pt2 = new PointF(x, y);
extendedPoints.Add(pt2);
extendedPoints.Add(pt4);
return extendedPoints;
}
结果是我得到两个点并得到一个3点的列表我在两个给定点之间的距离中间创建了一个新点:
您可以看到左侧pictureBox图像上有3个红点。 我在另外两个给定点的正中间创建了一个新点。
在这个案例的顶部,我做了:
point1 = new Point(80, 80);
point2 = new Point(280, 300);
extendedPoints = ExtendPoints(point1, point2);
我给出两个积分并获得三个积分的列表并显示三个积分。 现在我需要做更多两件事:
在方法内部首先我需要添加另一个点,这样List将返回所有点之间相等距离的四个点。 我需要以某种方式为新的第二点添加另一个数学计算。
我试着这样做:
extendedPoints.Add(pt1);
float x = (Math.Max(pt1.X, pt4.X) - Math.Min(pt1.X, pt4.X)) / 3 + Math.Min(pt1.X, pt4.X);
float y = (Math.Max(pt1.Y, pt4.Y) - Math.Min(pt1.Y, pt4.Y)) / 3 + Math.Min(pt1.Y, pt4.Y);
var pt2 = new PointF(x, y);
float a = (Math.Max(pt1.X, pt4.X) - Math.Min(pt1.X, pt4.X)) / 2 / 3 + Math.Min(pt1.X, pt4.X);
float b = (Math.Max(pt1.Y, pt4.Y) - Math.Min(pt1.Y, pt4.Y)) / 2 / 3 + Math.Min(pt1.Y, pt4.Y);
var pt3 = new PointF(a, b);
extendedPoints.Add(pt2);
extendedPoints.Add(pt3);
extendedPoints.Add(pt4);
我得到4分,但最后一点在距离上并不相等:
然后我需要使用FOR LOOP作为例子:
for (int i = 0; i < 100; i++)
它将在两个给定点之间产生100点相等的距离!
所以我不知道如何做到获得4个相等距离点的部分以及如何进行for循环?我现在需要根据我的代码。
答案 0 :(得分:4)
不太确定你在做什么,但是这应该在两个已知端点之间的直线上给你一系列等距点
private static List<PointF> ExtendPoints(PointF pt1, PointF pt4, int numberOfPoints)
{
extendedPoints = new List<PointF>();
extendedPoints.Add(pt1);
for(double d = 1; d < numberOfPoints-1; d++)
{
float a = (Math.Max(pt1.X, pt4.X) - Math.Min(pt1.X, pt4.X)) * d / (double)(numberOfPoints-1) + Math.Min(pt1.X, pt4.X);
float 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(a, b);
extendedPoints.Add(pt2);
}
extendedPoints.Add(pt4);
return extendedPoints;
}