используя математический Pow, изменяя переменные между double и int (растровое изображение Android) - PullRequest
0 голосов
/ 08 мая 2011

Я перебираю растровое изображение пиксель за пикселем, чтобы определить, находится ли этот пиксель внутри круга, помещенного в битовый массив. мне любезно дали математику, чтобы определить это, но алгоритм использует pow (double, double). я пробовал кастовать и использовать Integer.doubleValue безрезультатно. У кого-нибудь есть идеи, как заставить метод pow возвращать int, в котором нуждается метод sqrt ()? и centreX, и centreY тоже int.

[обновление] извините, sqrt возвращается и нуждается в двойном:)

спасибо мат.

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);
                    }
                }
            }

Ответы [ 4 ]

1 голос
/ 08 мая 2011

Спасибо всем,

Мой плохой метод pow () является статическим из класса Math, поэтому для доступа к нему статически необходим оператор точки.глупая ошибка :) например, Math.pow (d, d);

0 голосов
/ 12 мая 2011

Просто введите константу rsquared = radius*radius и измените ваше состояние на if ((i-centreX)*(i-centreX)+(y-centreX)*(y-centreX) <= rsquared).Плавающая точка не требуется.

0 голосов
/ 08 мая 2011

Если я правильно понял, и ваш вопрос состоит в том, как приводить double к int, почему бы вам не использовать функцию floor или ceil внутри Math?

0 голосов
/ 08 мая 2011

разделите ваш код на несколько строк, чтобы было легче определить строку, которая вызывает ошибку:

Имейте в виду, что это псевдокод: -)

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

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

int root = sqrt( c )

Затем выполните отладку этихстроки, чтобы определить ошибку: -)

...