日期:2014-05-18  浏览次数:20796 次

与数学有关的问题
遇到一个问题是:已知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);
}

------解决方案--------------------
探讨
遇到一个问题是:已知3个点的坐标,如何实现移动其中的一个点最终使这3个点最终构成一个等腰三角形?想知道具体的实现思路?可以通过编码实现的具体语言不限,下面是看到的一种方法(C#)返回的是最终可以满足要求的一个点newc,不过没有看明白,还希望知道的指点一下!谢谢……