2011-05-08 49 views
0

我正在逐個像素地循環一個位圖,以確定該像素是否位於位圖上的一個圓圈內。我一直慷慨給予數學來確定這一點,但算法是使用pow(double,double)。我試着鑄造和使用Integer.doubleValue無濟於事。有沒有人有任何想法如何讓pow方法返回sqrt()方法需要的int? centreX和centreY都是一樣的。使用數學pow,改變雙和int之間的變量(android位圖)

[更新] 對不起開方回報,需要一個雙:)

感謝墊。

for (int i=0; i < bgr.getWidth(); ++i) { 
       for (int y=0; y < bgr.getHeight(); ++y) { 

        int aPixel = bgr.getPixel(i,y); 

         if(sqrt(pow(i - centreX, 2) + (pow(y - centreY, 2))) <= radius){ 

         bgr.setPixel(i,y,Color.MAGENTA); 
        } 
       } 
      } 
+0

你在循環整個位圖嗎?真? – 2011-05-08 11:13:14

+0

@ignacio vazquez-abrams爲什麼我感覺這是一個糟糕的主意:) – turtleboy 2011-05-08 11:25:44

+0

圓圈有一個*非常*明確的方形包圍盒,多一點數學可以找到一個八邊形包圍盒,只有那些像素需要檢查。 – 2011-05-08 11:47:18

回答

1

感謝所有,

我的壞戰俘()方法是從Math類靜態的,所以需要點操作靜態訪問它。愚蠢的錯誤:)例如Math.pow(d,d);

0

鴻溝代碼分爲幾行所以它更容易發現導致該錯誤行:

請記住,這是僞代碼:-)

double a = pow(i - centreX, 2); 
double b = pow(y - centreY, 2); 

int c = (parse to int) (a + b) 

int root = sqrt(c) 

然後調試那些線來發現錯誤:-)

0

如果我理解正確,你的問題是如何將double轉換爲int,爲什麼不在Math中使用floor或ceil函數?

0

只需引入一個常量rsquared = radius*radius並將您的條件更改爲if ((i-centreX)*(i-centreX)+(y-centreX)*(y-centreX) <= rsquared)。不需要浮點。