接上一篇(定義四邊形類)
具體代碼如下:
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,但我覺得比考慮對邊相等容易,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/222937.html
標籤:java
