如何在两个已知点之间创建一组等距点?

时间:2013-12-30 10:17:14

标签: c# winforms

该方法得到两个点并返回一个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点的列表我在两个给定点之间的距离中间创建了一个新点:

enter image description here

您可以看到左侧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分,但最后一点在距离上并不相等:

enter image description here

然后我需要使用FOR LOOP作为例子:

for (int i = 0; i < 100; i++)

它将在两个给定点之间产生100点相等的距离!

所以我不知道如何做到获得4个相等距离点的部分以及如何进行for循环?我现在需要根据我的代码。

1 个答案:

答案 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;
}