我一直在试图弄清楚这一点现在一段定义的..投影线的一个点得到2分
要解决的问题..
说我有3点..
P1 ---------- P2, and P3 can be anywhere around P1 and P2
什么是计算公式,以便P3插入到P1和P2之间的线上?
我需要计算新的X中的公式,P3上P1和P2之间的界线落在Y坐标..
我的代码到目前为止..
public Point lerp(Point P0, Point P1, Point P)
{
double y1 = P0.Y + (P1.Y - P0.Y) * ((P.X - P0.X)/(P1.X - P0.X));
double x1 = P.X;
double y2 = P.Y;
double x2 = P0.X + (P1.X - P0.X) * ((P.Y - P0.Y)/(P1.Y - P0.Y));
return new Point((x1 + x2)/2, (y1 + y2)/2);
}
而我参考.. http://en.wikipedia.org/wiki/Linear_interpolation
上面的代码得到它接近,但其微客...
下面是转换的JavaScript代码来自Corey Ogburn
public Point _pointOnLine(Point pt1, Point pt2, Point pt)
{
bool isValid = false;
var r = new Point(0, 0);
if (pt1.Y == pt2.Y && pt1.X == pt2.X) { pt1.Y -= 0.00001; }
var U = ((pt.Y - pt1.Y) * (pt2.Y - pt1.Y)) + ((pt.X - pt1.X) * (pt2.X - pt1.X));
var Udenom = Math.Pow(pt2.Y - pt1.Y, 2) + Math.Pow(pt2.X - pt1.X, 2);
U /= Udenom;
r.Y = pt1.Y + (U * (pt2.Y - pt1.Y));
r.X = pt1.X + (U * (pt2.X - pt1.X));
double minx, maxx, miny, maxy;
minx = Math.Min(pt1.Y, pt2.Y);
maxx = Math.Max(pt1.Y, pt2.Y);
miny = Math.Min(pt1.X, pt2.X);
maxy = Math.Max(pt1.X, pt2.X);
isValid = (r.Y >= minx && r.Y <= maxx) && (r.X >= miny && r.X <= maxy);
return isValid ? r : new Point();
}
嗯......你的意思'P3'是一些任意点(可能_not_就行了),并投上找到该行的一个点?就像投下阴影一样?所以考虑到投影点'P4',你可以从'P1P2'绘制一条垂直线并且它会碰到'P3'? – 2013-03-05 19:26:26
是的,这正是我想要做的。 – 2013-03-05 19:29:00
我已更改标题以匹配您的评论 - 随时恢复。 – 2013-03-05 19:33:37