【发布时间】: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。
那么错误在哪里?计算方法有问题?
【问题讨论】: