【问题标题】:How do i find the middle point/s coordinates between two points?我如何找到两点之间的中间点坐标?
【发布时间】:2014-01-16 18:51:25
【问题描述】:

我有这个方法:

private static List<PointF> ExtendPoints(PointF pt1, PointF pt3)
        {
            float x = (Math.Max(pt1.X, pt3.X) - Math.Min(pt1.X, pt3.X)) / 2 + Math.Min(pt1.X, pt3.X);
            float y = (Math.Max(pt1.Y, pt3.Y) - Math.Min(pt1.Y, pt3.Y)) / 2 + Math.Min(pt1.Y, pt3.Y);
            var pt2 = new PointF(x, y);
            extendedPoints.Add(pt1);
            extendedPoints.Add(pt2);
            extendedPoints.Add(pt3);
            return extendedPoints;
        }

我给出两点,它返回一个带有 3 点的列表,新点 pt2 位于中间。 计算只是为了找到两个给定点的距离之间的excat坐标。

现在我想让它返回一个包含 4 个点的列表。

点1点2点3点4

Thr 列表格式为:pt1 pt2 pt3 pt4,新点为 pt3 和 pt4。 所以现在我需要将它除以 3 吗?我需要找到给定两点之间的确切两点。

这就是我所做的,但它没有给出正确的结果:

private static List<PointF> ExtendPoints(PointF pt1, PointF pt4)
        {
            float x = (Math.Max(pt1.X, pt4.X) - Math.Min(pt1.X, pt4.X)) / 3 + Math.Min(pt1.X, pt4.X); // Could also doing: (pt1.X + pt3.X) / 2;
            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(pt1);
            extendedPoints.Add(pt2);
            extendedPoints.Add(pt3);
            extendedPoints.Add(pt4);
            return extendedPoints;
        }

List return extendedPoints 包含 4 个索引,每个索引有 x 和 y。

然后我在施工:

point1 = new Point(80, 80);
point2 = new Point(280, 300);
extendedPoints = ExtendPoints(point1, point2);

然后在绘制事件中我想显示返回的点列表:

foreach (PointF pt in extendedPoints)
            {
                e.FillEllipse(Brushes.Red, pt.X, pt.Y, 4f, 4f);
            }

但我只看到 3 分而不是 4。

那么错误在哪里?计算方法有问题?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    是的,将每个轴上的行进距离除以 1/3 和 2/3 将得到两个端点之间直线上的中间点。基本几何。

    【讨论】:

    • keshlam 所以我保留了现在除以 2 的两个 x 和 y。并添加两个新变量 x,例如 a 和 b,这次除以 3
    • 如果您想将直线分成三个相等的段,请忽略或丢弃 1/2 结果,而是将一个点除以 1/3,另一点除以 2/3。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 2021-08-04
    相关资源
    最近更新 更多