【发布时间】:2017-03-30 18:05:50
【问题描述】:
我正在尝试使用二维数组在 android 中进行一些映射。基本上任务是将极坐标转换为笛卡尔坐标(两个坐标都必须是整数)。此转换用于在计算的 X 和 Y 坐标处选取一个值。
我有一个r 和需要返回x 和y 的输入。 (int)(R + rcostheta) 和 (int)(R - rsintheta) 会给我所需的值(因为我的原始笛卡尔矩阵是 2R * 2R)。但是重复计算它们会导致大量开销。所以我决定预先计算这些值,这样我就可以避免计算。 (当我运行我的代码时,这些计算确实需要大约 2-3 秒的开销)
也就是说,我可以不使用Value[x][y],而是使用
Value [ X[r][theta] ] [ Y[r][theta] ]
但是这个转换矩阵/二维数组非常大。它有 128 x 960 个元素(我的应用程序有 128 个半径和 960 个段)。我不断收到“代码太大”错误。
您能建议一种简单的方法来实现这一点吗?即,将此映射矩阵存储在可以在没有太多开销的情况下引用的地方。
有些人建议使用数据库。但由于我是 android 编程新手,所以看起来有点吓人。当然可以简单得多?
目前我将两个映射矩阵存储为
int[][] X = new int[][]{
{229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356},
{next line},
.
.
.
{last line};
并将其用作
getBinary(tempBitmap, X[j][i],Y[j][i]);
如果 X 和 Y 矩阵更小,这应该可以工作。但由于它们很大,我不能这样做。请建议一种方法来执行此操作。
【问题讨论】:
-
我也是这么想的。只到 1/4 部分。但是当我将大小减小到 1/4 时,我仍然得到代码太大的错误。我认为这个矩阵太大了,无法在这样的代码中使用
-
是的,但即便如此,它仍然太大了。我不禁认为这是不好的编程习惯。在主代码中定义如此庞大的数组。
标签: java android performance optimization storage