如何找到两点之间的中间点/ s坐标?

时间:2013-12-29 21:17:49

标签: c# winforms

我有这个方法:

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个点的List,新点pt2在中间。 计算只是找到两个给定点之间距离的激励坐标。

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

pt1 pt2 pt3 pt4

Thr List格式为: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);

然后在paint事件中我想显示List返回的点数:

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

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

那么bug在哪里?计算方法中的某些内容是错误的吗?

1 个答案:

答案 0 :(得分:2)

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

相关问题