что совместимо в памяти дб для лазурного космоса дб

EDITED: 06 сентября 2017

Это алгоритм, изобретенный мной, чтобы нарисовать круг по целочисленной матрице. Та же идея может быть использована для записи круга внутри BufferedImage. Если вы пытаетесь рисовать этот круг с помощью класса Graphics, это не ваше антивирусное ПО, которое вы ищете (если вы не хотите изменять каждое назначение цвета с помощью g.drawLine (x, y, x + 1, y), но оно может быть очень медленным).

protected boolean runOnCircumference(int[][] matrix, int x, int y, int ray, int color) {
    boolean ret;
    int[] rowUpper = null, rowInferior = null, rowCenterUpper = null, rowCenterInferior = null;

    if (ret = ray > 0) {
        if (ray == 1) {
            matrix[y][x + 1] = color;
            rowUpper = matrix[++y];
            rowUpper[x] = color;
            rowUpper[x + 2] = color;
            matrix[y][x] = color;
        } else {
            double rRay = ray + 0.5;
            int r = 0, c = 0, ray2 = ray << 1, ray_1 = ray - 1, halfRay = (ray >> 1) + ray % 2, rInf,
                    ray1 = ray + 1, horizontalSymmetricOldC;
            // draw cardinal points

            rowUpper = matrix[ray + y];
            rowUpper[x] = color;
            rowUpper[x + ray2] = color;
            matrix[y][x + ray] = color;
            matrix[ray2 + y][x + ray] = color;

            horizontalSymmetricOldC = ray1;
            rInf = ray2;
            c = ray_1;
            for (r = 0; r < halfRay; r++, rInf--) {

                rowUpper = matrix[r + y];
                rowInferior = matrix[rInf + y];

                while (c > 0 && (Math.hypot(ray - c, (ray - r)) < rRay)) {

                    rowUpper[x + c] = color;
                    rowUpper[x + horizontalSymmetricOldC] = color;
                    rowInferior[x + c] = color;
                    rowInferior[x + horizontalSymmetricOldC] = color;

                    // get the row pointer to optimize
                    rowCenterUpper = matrix[c + y];
                    rowCenterInferior = matrix[horizontalSymmetricOldC + y];
                    // draw
                    rowCenterUpper[x + r] = color;
                    rowCenterUpper[x + rInf] = color;
                    rowCenterInferior[x + r] = color;
                    rowCenterInferior[x + rInf] = color;
                    horizontalSymmetricOldC++;
                    c--;
                }
            } // end r circle
        }
    }
    return ret;
}

Я пробовал это много раз, проверяя вручную его правильность, поэтому я думаю, что это сработает. Я не делал проверку диапазона только для упрощения кода. Надеюсь, это поможет вам и всем желающим нарисовать круг по матрице (например, тех программистов, которые пытаются создать свои собственные видеоигры на чистом коде и должны управлять матрично-ориентированной карточкой игры для хранения объектов, лежащих на game-map [если вам нужна помощь по этому поводу, напишите мне]).

0
задан prasanna chouta 19 March 2019 в 13:19
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: