【问题标题】:How do I create a set of equidistant points between two known points?如何在两个已知点之间创建一组等距点?
【发布时间】:2014-01-17 05:11:45
【问题描述】:

该方法获取两个点并返回一个包含 30 个点的列表。 当我在绘画事件中显示点时,我看到一大圈点。 我想将这些点显示为不是圆形,而是像...... . . .像这样

我在课堂上排名第一:

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);

我给出两点并获得三点列表并显示三点。 现在我需要做更多的两件事:

在方法内部,我首先需要添加另一个点,这样列表将返回四个点,所有点之间的距离相等。 我需要以某种方式为新的第二点添加另一个数学计算。

我试着这样做:

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);

我得到了四个点,但最后一个点的距离不相等:

然后我需要使用 FOR LOOP 例如:

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

它将在两个给定点之间创建 100 个等距的点!

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

【问题讨论】:

  • 如果您希望所有点都出现在一行中,那么只需给它们都提供相同的 Y 变量。
  • Steven 好的,我只更改了这一行:PointF circlePoint = new PointF((float)x, 100);//(float)y);为测试 100 添加。但现在我看到了一条线上的点,但点之间的距离不等于当它是圆形时。
  • 也许您需要更好地解释一下您到底想要实现什么。你能否用两张图片展示你得到了什么以及你想得到什么?
  • Steven 好的,我正在更新我的问题。
  • 更新了我的问题,图像很小,我不知道为什么。也许你可以拯救他们看看红点和我的意思。

标签: c# winforms


【解决方案1】:

不太确定您在做什么,但这应该会在两个已知端点之间的直线上为您提供一系列等距点

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

【讨论】:

  • 这应该可以了,正要发布类似的东西。
猜你喜欢
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多