我逐个像素地循环一个位图,以确定该像素是否位于位图上的圆圈内。我已经给了数学确定这个但算法是使用pow(double,double)。我已经尝试使用Integer.doubleValue进行转换并无效。有没有人有任何想法如何让pow方法返回sqrt()方法需要的int? 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);
}
}
}
答案 0 :(得分:1)
全心全意,
我的错误,pow()方法是Math类的静态方法,因此需要点运算符静态访问它。愚蠢的错误:)例如Math.pow(d,d);
答案 1 :(得分:0)
将代码划分为更多行,以便更容易找到导致错误的行:
请记住这是伪代码: - )
double a = pow(i - centreX, 2);
double b = pow(y - centreY, 2);
int c = (parse to int) (a + b)
int root = sqrt( c )
然后调试这些行以发现错误: - )
答案 2 :(得分:0)
如果我理解正确并且您的问题是如何将double转换为int,为什么不在Math
内使用floor或ceil函数?
答案 3 :(得分:0)
只需引入常量rsquared = radius*radius
并将条件更改为if ((i-centreX)*(i-centreX)+(y-centreX)*(y-centreX) <= rsquared)
。不需要浮动点。