读书人

与数学有关的有关问题

发布时间: 2012-03-20 14:01:11 作者: rapoo

与数学有关的问题
遇到一个问题是:已知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,不过没有看明白,还希望知道的指点一下!谢谢……

读书人网 >C#

热点推荐