【问题标题】:how to create a circle's bounding box android如何创建一个圆圈的边界框android
【发布时间】:2011-08-26 13:02:26
【问题描述】:

我有一个位图,它通过 onTouchEvent() 方法设置两个变量 centerX、centerY。从这些 x,y 坐标中,我在位图上画了一个圆圈,并且可以通过滑动条将圆圈的像素更改为不同的 rgb 值。我用算法来定位圆的内部像素,但不幸的是,就目前而言,我必须逐个像素地搜索整个位图以定位圆的像素。这有一个巨大的方法调用开销,我想减少它。

我想做的是在圆圈周围创建一个边界框,这样我的算法可以搜索的空间更少,因此有望加快速度。如何使用圆的 x,y 中心坐标和 50 的半径在圆周围创建一个矩形?

谢谢马特。

public void findCirclePixels(){ 


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

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

                    bgr.setPixel(i,y,Color.rgb(Progress+50,Progress,Progress+100));
                }
            }
        }   

        }// end of changePixel()

【问题讨论】:

  • 我想,画一个新的圆圈会便宜得多。您应该考虑引入一个 framestep 或者只是清除并重新创建屏幕内容
  • @kostja 你好,我不确定你是否理解我的要求,如果你理解了,对不起:)。我只是将圆圈的像素设置为不同的颜色,以确保滑块和像素算法标记正确的像素。该应用程序最终会在圆圈上应用鱼眼效果。(基本上会扭曲圆圈的像素)。我可以在位图中找到圆圈像素的唯一方法是从左到右,自上而下,逐个像素地搜索整个位图。我只想在圆圈周围搜索一个矩形,所以电话更少。
  • 我以为我理解了您的要求,但我不再那么确定了,尤其是为什么 :) 如果我的第一条评论不符合您的问题,请忽略它。

标签: android bitmap geometry bounding-box


【解决方案1】:

将外环限制从 circle.x - 半径更改为 circle.x + 半径,将内环限制从 circle.y - 半径更改为 circle.y + 半径。根据您的 x 和 y 可以是什么,您可能需要检查这些值是否小于 0 或大于图像宽度或高度的限制。

【讨论】:

  • clay hi,我的外循环限制不是 bgr.getWidth() 吗?
  • clay 我不确定你的意思是不是下面的答案,但这就是我所做的,现在速度更快了,谢谢。
  • @turtleboy,我很高兴它对你来说更快,但如果我理解你所做的,你应该能够通过改变我所说的限制来让它更快。您应该能够执行类似 "i=circle.x - radius; i
  • clay 好的,我会按照你的方式进行,但如果半径为 50,则直径为 100,所以我循环了一个 100x100 的假想盒子。圆圈的边缘会碰到这个想象中的盒子,所以我认为它不会变得更快。感谢您的建议,如果它确实加快了速度,我会告诉您:)。列表中的下一个是 asynctask。
【解决方案2】:

这很好。

 public void findCirclePixels(){    



        for (int i=centreX-50; i < centreX+50; ++i) {
            for (int y=centreY-50; y <centreY+50 ; ++y) {

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

                    bgr.setPixel(i,y,Color.rgb(Progress+50,Progress,Progress+100));
                }
            }
        }

        }// end of changePixel()

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多