我想列印出一條線,它的點數由用戶給出。我用它來檢查一個點是否在線。(我知道它可以做得更有效。不要擔心。)
int proportionalFactor = (x2 - x1) / (y2 - y1);
int offset = y1 - x1 * proportionalFactor;
for(int y = 0; y < 100; y ){ //going over
for(int x = 0; x < 100; x ){ //every point
if(y == proportionalFactor * x offset){ //and checking if it's on the line
printf("X"); //if so, mark it
}else{
printf(" "); //if not, skip it
}
}
}
如您所見,我只是將正規方程用于線性函式。但在兩種情況下這是行不通的。這條線要么是水平的,要么是垂直的。對于每條稍微對角線,它都有效。如果有幫助,以下是它在程式中的外觀圖片:
輸入: 10|10, 90|90 - 作業正常

輸入:10|10, 10|90 - 如您所見,它是水平的,盡管它應該是垂直的

Aaaand 最后但并非最不重要的輸入:10|10, 10|90 - 應該是垂直線
當我輸入這些值時程式崩潰,所以沒有圖片適合這種情況
我的問題是,如果我可以改變我的方程中的任何東西來使這個作業,我解釋錯誤的方程的哪一部分?
uj5u.com熱心網友回復:
如果一條線包含點 ( x 1 , y 1 ) 和 ( x 2 , y 2 ),則該線的方程為 ( y - y 1 ) / ( x - x 1 ) = ( y 2 - y 1 ) / ( x 2 - x 1 )。直觀地說,這表示從 ( x 1 , y 1 ) 到點 ( x , y ) 的線段的斜率與從 ( x 1的線段的斜率相同, y 1 ) 到 ( x 2 , y 2 )。
但是,當存在除以零時,等式中的運算式沒有定義,這發生在直線垂直時,因此x 1 = x 2,或者當x為x 1時。為了糾正這個問題,我們可以乘以 ( x - x 1 ) 和 ( x 2 - x 1 )。這給了我們 ( y - y 1 ) ? ( x 2 - x 1 ) = ( y 2 - y 1 ) ? ( x - x 1)。這也是有益的,因為避免除法意味著我們可以使用整數算術,如果所涉及的所有變數都是整數。
因此,如果在算術中沒有發生整數溢位,當且僅當時,點 ( x, ) 位于 ( , ) 和 ( , )y定義的行上。x1y1x2y2(y-y1) * (x2-x2) == (y2-y1) * (x-x1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410940.html
標籤:
上一篇:如何計算一個點是否在一個圓內
