Android Studio 如何从一个二维的圆形数组中得到点?

rvpgvaaj  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(123)

我只是在玩Android Studio位图,并通过迭代为我的应用程序创建了一个点状背景。

constant = 60;

int padding_X = (int) Math.floor((width % constant)/2f);
if (padding_X == 0) {
    padding_X = (int) Math.floor(constant / 2);
}
int padding_Y = (int) Math.floor((height % constant)/2f);
if (padding_Y == 0) {
    padding_Y = (int) Math.floor(constant/2);
}

System.out.println("padding X: "+padding_X);
System.out.println("padding Y: "+padding_Y);

int max_xn = Math.round((width-(padding_X*2)) / constant);
int max_yn = Math.round((height-(padding_Y*2)) / constant);

System.out.println("max xn: "+max_xn);
System.out.println("max yn: "+max_yn);

point_matrix = new int[max_xn+1][max_yn+1][2];
lens = new int[2];

for (int yn = 0; yn <= max_yn; yn++) {
    int y = (int) (padding_Y + (yn*constant));
    for (int xn = 0; xn <= max_xn; xn++) {
        int x = (int) (padding_X + (xn*constant));

        System.out.println("point @ x: "+x+" y: "+y);
        canvas.setPixel(x,y,Color.parseColor("#ffffff"));

        point_matrix[xn][yn][0] = x;
        point_matrix[xn][yn][1] = y;
    }
}

runOnUiThread(() -> {
    iv0.setImageBitmap(canvas);
});

lens[0] = max_xn+1;
lens[1] = max_yn+1;

我还将每个白色像素添加到一个三维数组int[][][]中。该数组包含用于索引点的xn和yn。最后一个数组包含屏幕坐标。示例:{5,1,{100,250}} 5是x轴上的点索引,1是y轴上的索引,100和250是位图上的坐标。
我希望能找到一种方法来找出三维阵列上的所有点在一定的半径从中心。
我的一个计划是迭代3dim数组中的所有元素,用毕达哥拉斯定理或类似的方法计算到中心的距离,但这将是非常低效的,因为这将需要做多次。
最终的计划是让所有的点从中心开始以圆周运动的方式消失。每个“半径间隔”之间有一个延迟。

u0njafvf

u0njafvf1#

使用三角函数:)

static double i = 0;
static double pi = Math.PI;
static int q = 5;     // half size of array
static double x;
static double y;
static double cx = 5; // offset center x 
static double cy = 5; // offset center y 
public static void main(String[] args) {
    while (i < pi * 2) {    // pi*2 is full angle of circle
        x = Math.round (cx + Math.sin(i) * q);
        y = Math.round (cy + Math.cos(i) * q);
        System.out.print(String.format("X = %4f", x) + String.format("Y = %4f", y) + "\n");
        i+=pi/180;
    }
}

相关问题