接上一篇(定义四边形类)
具体代码如下:
class PXSBX : SBX //平行四边形类,继承四边形类
{
public bool IsPXSBX() //判断是否为平行四边形
{
if (((Py2 - Py1) * (Px4 - Px3) == (Py4 - Py3) * (Px2 - Px1)) && ((Py4 - Py1) * (Px2 - Px3) == (Py2 - Py3) * (Px4 - Px1)))
return true;
else if (((Py3 - Py1) * (Px4 - Px2) == (Py4 - Py2) * (Px3 - Px1)) && ((Py4 - Py1) * (Px2 - Px3) == (Py2 - Py3) * (Px4 - Px1)))
return true;
else if (((Py2 - Py1) * (Px4 - Px3) == (Py4 - Py3) * (Px2 - Px1)) && ((Py3 - Py1) * (Px2 - Px4) == (Py2 - Py4) * (Px3 - Px1)))
return true; //两组对边分别平行(即边的斜率相等)的四边形则为平行四边形
else
return false;
}
}
判断是否为平行四边形时,我刚开始想的是两组对边相等,写的代码如下:
//double I1, I2, I3, I4; //四条边的长度
//I1 = Math.Sqrt(Math.Abs((Px1 - Px2) * (Px1 - Px2) + (Py1 - Py2) * (Py1 - Py2)));
//I2 = Math.Sqrt(Math.Abs((Px1 - Px3) * (Px1 - Px3) + (Py1 - Py3) * (Py1 - Py3)));
//I3 = Math.Sqrt(Math.Abs((Px4 - Px2) * (Px4 - Px2) + (Py4 - Py2) * (Py4 - Py2)));
//I4 = Math.Sqrt(Math.Abs((Px4 - Px3) * (Px4 - Px3) + (Py4 - Py3) * (Py4 - Py3)));
//if ((I1 == I4) && (I2 == I3))
// return true; //对边均相等,则为平行四边形
//else
// return false;
但是这样对输入的顶点顺序就有要求了,比如我的代码里就间接性要求用户输入的第一个顶点和第四个顶点是对角的,所以当用户输入了可以形成四边形的四个顶点,但是可能会因为输入顺序不同而判断不同。
后来就考虑了:两组对边分别平行(即边的斜率相等)的四边形则为平行四边形。在平行四边形里对角线也是可以与边相等的,但是斜率是肯定不会相等,虽然考虑了三种情况下是true,其他是false,但我觉得比考虑对边相等容易。