与数学有关的问题
遇到一个问题是:已知3个点的坐标,如何实现移动其中的一个点最终使这3个点最终构成一个等腰三角形?想知道具体的实现思路?可以通过编码实现的具体语言不限,下面是看到的一种方法(C#)返回的是最终可以满足要求的一个点newc,不过没有看明白,还希望知道的指点一下!谢谢……
private Point newc;
private int newcx, newcy;
//-----
public IsocelesTriangle(Point a, Point b, Point c){
float dx1, dy1, dx2, dy2, side1, side2;
float slope, intercept;
int incr;
dx1 = b.X - a.X;
dy1 = b.Y - a.Y;
dx2 = c.X - b.X;
dy2 = c.Y - b.Y;
side1 = calcSide(dx1, dy1);
side2 = calcSide(dx2, dy2);
if (side2 < side1)
incr = -1;
else
incr = 1;
slope = dy2 / dx2;
intercept = c.Y - slope * c.X;
//move point c so that this is an isoceles triangle
newcx = c.X;
newcy = c.Y;
while (Math.Abs (side1 - side2) > 1) {
newcx = newcx + incr; //iterate a pixel at a time until close
newcy = (int)(slope * newcx + intercept);
dx2 = newcx - b.X;
dy2 = newcy - b.Y;
side2 = calcSide(dx2, dy2);
}
newc = new Point(newcx, newcy);
}
private float calcSide(float a, float b) {
return (float)Math.Sqrt (a*a + b*b);
}
[解决办法]