我有这个方法:
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在哪里?计算方法中的某些内容是错误的吗?
答案 0 :(得分:2)
是的,将每个轴上行进的距离除以1/3和2/3将得到两个端点之间直线上的中间点。基本几何。