Continuar con el artículo anterior (definir clase de cuadrilátero)
El código específico es el siguiente:
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;
}
}
Al juzgar si es un paralelogramo, solo pensé que los dos lados opuestos son iguales, y el código es el siguiente:
//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;
Pero esto requiere el orden de los vértices de entrada. Por ejemplo, en mi código, el primer vértice y el cuarto vértice ingresados por el usuario deben ser indirectamente diagonales, por lo que cuando el usuario ingresa los cuatro vértices que pueden formar un cuadrilátero , Pero se puede juzgar de manera diferente debido al orden de entrada diferente.
Posteriormente, se consideró: los dos conjuntos de cuadriláteros con lados opuestos paralelos (es decir, los lados tienen la misma pendiente) son paralelogramos. En un paralelogramo, las diagonales pueden ser iguales a los lados, pero las pendientes definitivamente no son iguales, aunque los tres casos se consideran verdaderos y los otros falsos, creo que es más fácil que considerar iguales los lados opuestos.