/* * JGrass - Free Open Source Java GIS http://www.jgrass.org * (C) HydroloGIS - www.hydrologis.com * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Library General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) any * later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more * details. * * You should have received a copy of the GNU Library General Public License * along with this library; if not, write to the Free Foundation, Inc., 59 * Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.jgrasstools.hortonmachine.modules.hydrogeomorphology.energyindexcalculator; import static java.lang.Math.floor; import static java.lang.Math.pow; import static java.lang.Math.sqrt; import static java.lang.Math.tan; import static org.jgrasstools.gears.libs.modules.JGTConstants.isNovalue; import java.awt.image.WritableRaster; import javax.media.jai.iterator.RandomIter; /** * @author Stefano Endrizzi */ public class GeomorphUtilities { public void orizzonte1( double delta, int quadrata, double beta, double alfa, RandomIter elevImageIterator, WritableRaster curvatureImage, int[][] shadow ) { int rows = curvatureImage.getHeight(); int cols = curvatureImage.getWidth(); /*=====================*/ int y, I, J; double zenith; /*======================*/ if (beta != 0) { for( int j = 0; j < quadrata; j++ ) { I = -1; J = -1; y = 0; for( int jj = j; jj >= 0; jj-- ) { for( int i = (int) floor(1 / tan(beta) * (j - jj)); i <= (int) floor(1 / tan(beta) * (j - jj + 1)) - 1 && i < rows; i++ ) { if (jj < cols && !isNovalue(elevImageIterator.getSampleDouble(jj, i, 0))) { /*shadow->element[i][jj]=j;}}}}}*/ if (curvatureImage.getSampleDouble(jj, i, 0) == 1 && I == -1) { I = i; J = jj; y = 1; } else if (curvatureImage.getSampleDouble(jj, i, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator .getSampleDouble(jj, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - jj) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj] = 0; I = i; J = jj; } else { shadow[i][jj] = 1; } } else if (curvatureImage.getSampleDouble(jj, i, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator .getSampleDouble(jj, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - jj) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj] = 0; y = 0; } else { shadow[i][jj] = 1; } } } } } } } else { for( int j = 0; j < cols; j++ ) { I = -1; J = -1; y = 0; for( int i = 0; i < rows; i++ ) { if (!isNovalue(elevImageIterator.getSampleDouble(j, i, 0))) { if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I == -1) { I = i; J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; I = i; J = j; } else { shadow[i][j] = 1; } } else if (curvatureImage.getSampleDouble(j, i, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; y = 0; } else { shadow[i][j] = 1; } } } } } } } /*----------------------------------------------------------------------------------------------------------*/ public void orizzonte2( double delta, int quadrata, double beta, double alfa, RandomIter elevImageIterator, WritableRaster curvatureImage, int[][] shadow ) { int rows = curvatureImage.getHeight(); int cols = curvatureImage.getWidth(); /*=====================*/ int y, I, J; double zenith; /*======================*/ if (beta != 0) { for( int i = quadrata; i >= 0; i-- ) { I = -1; J = -1; y = 0; for( int ii = i; ii < quadrata; ii++ ) { for( int j = cols - (int) floor(1 / tan(beta) * (ii - i)) - 1; j >= cols - (int) floor(1 / tan(beta) * (ii - i + 1)) - 1 && j >= 0; j-- ) { if (ii >= (rows + 2 * cols) && !isNovalue(elevImageIterator.getSampleDouble(j, ii - (rows + 2 * cols), 0))) { /*shadow->element[ii-(Z0->nrh+2*Z0->nch)][j]=i}}}}}*/ if (curvatureImage.getSampleDouble(j, ii - (rows + 2 * cols), 0) == 1 && I == -1) { I = ii - (rows + 2 * cols); J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, ii - (rows + 2 * cols), 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, ii - (rows + 2 * cols), 0)) / sqrt(Math.pow((double) (I - (ii - (rows + 2 * cols))) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii - (rows + 2 * cols)][j] = 0; I = ii - (rows + 2 * cols); J = j; } else { shadow[ii - (rows + 2 * cols)][j] = 1; } } else if (curvatureImage.getSampleDouble(j, ii - (rows + 2 * cols), 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, ii - (rows + 2 * cols), 0)) / sqrt(Math.pow((double) (I - (ii - (rows + 2 * cols))) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii - (rows + 2 * cols)][j] = 0; y = 0; } else { shadow[ii - (rows + 2 * cols)][j] = 1; } } } } } } } else { for( int i = 0; i < rows; i++ ) { I = -1; J = -1; y = 0; for( int j = cols - 1; j >= 0; j-- ) { if (!isNovalue(elevImageIterator.getSampleDouble(j, i, 0))) { if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I == -1) { I = i; J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; I = i; J = j; } else { shadow[i][j] = 1; } } else if (curvatureImage.getSampleDouble(j, i, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; y = 0; } else { shadow[i][j] = 1; } } } } } } } /*----------------------------------------------------------------------------------------------------------*/ public void orizzonte3( double delta, int quadrata, double beta, double alfa, RandomIter elevImageIterator, WritableRaster curvatureImage, int[][] shadow ) { int rows = curvatureImage.getHeight(); int cols = curvatureImage.getWidth(); /*=====================*/ int y, I, J; double zenith; /*======================*/ for( int i = 0; i < quadrata; i++ ) { I = -1; J = -1; y = 0; for( int ii = i; ii >= 0; ii-- ) { for( int j = cols - (int) floor(1.0 / tan(beta) * (i - ii)) - 1; j >= cols - (int) floor(1.0 / tan(beta) * (i - ii + 1)) - 1 && j >= 0; j-- ) { if (ii < rows && !isNovalue(elevImageIterator.getSampleDouble(j, ii, 0))) { /*shadow->element[ii][j]=i;}}}}*/ if (curvatureImage.getSampleDouble(j, ii, 0) == 1 && I == -1) { I = ii; J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, ii, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, ii, 0)) / sqrt(pow((double) (I - ii) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii][j] = 0; I = ii; J = j; } else { shadow[ii][j] = 1; } } else if (curvatureImage.getSampleDouble(j, ii, 0) == 0 && I != -1 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, ii, 0)) / sqrt(pow((double) (I - ii) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii][j] = 0; y = 0; } else { shadow[ii][j] = 1; } } // System.out.println(ii + " " + j + " " + shadow[ii][j]); } } } } } public void orizzonte3tmp( double delta, int quadrata, double beta, double alfa, double[][] Z0, int[][] curv, int[][] shadow, double novalue ) { int i, j, ii, y, I, J; double zenith; for( i = 0; i < quadrata; i++ ) { I = -1; J = -1; y = 0; for( ii = i; ii >= 0; ii-- ) { for( j = Z0[0].length - 1 - (int) floor(1.0 / tan(beta) * (double) (i - ii)); j >= Z0[0].length - 1 - floor(1.0 / tan(beta) * (i - ii + 1)) && j >= 0; j-- ) { if (ii < Z0.length && Z0[ii][j] != novalue) { /*shadow.element[ii][j]=i;}}}}*/ if (curv[ii][j] == 1 && I == -1) { I = ii; J = j; y = 1; } else if (curv[ii][j] == 1 && I != -1) { zenith = (Z0[I][J] - Z0[ii][j]) / sqrt(pow((double) (I - ii) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii][j] = 0; I = ii; J = j; } else { shadow[ii][j] = 1; } } else if (curv[ii][j] == 0 && I != 0 && y == 1) { zenith = (Z0[I][J] - Z0[ii][j]) / sqrt(pow((double) (I - ii) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii][j] = 0; y = 0; } else { shadow[ii][j] = 1; } } } } } } } /*----------------------------------------------------------------------------------------------------------*/ public void orizzonte4( double delta, int quadrata, double beta, double alfa, RandomIter elevImageIterator, WritableRaster curvatureImage, int[][] shadow ) { int rows = curvatureImage.getHeight(); int cols = curvatureImage.getWidth(); /*=====================*/ int y, I, J; double zenith; /*======================*/ if (beta != 0) { for( int j = 0; j < quadrata; j++ ) { I = -1; J = -1; y = 0; for( int jj = j; jj >= 0; jj-- ) { for( int i = rows - (int) floor(1 / tan(beta) * (j - jj)) - 1; i >= rows - (int) floor(1 / tan(beta) * (j - jj + 1)) - 1 && i >= 0; i-- ) { if (jj < cols && !isNovalue(elevImageIterator.getSampleDouble(jj, i, 0))) { /*shadow.element[i][jj]=j;}}}}}*/ if (curvatureImage.getSampleDouble(jj, i, 0) == 1 && I == -1) { I = i; J = jj; y = 1; } else if (curvatureImage.getSampleDouble(jj, i, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator .getSampleDouble(jj, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - jj) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj] = 0; I = i; J = jj; } else { shadow[i][jj] = 1; } } else if (curvatureImage.getSampleDouble(jj, i, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator .getSampleDouble(jj, i, 0)) / sqrt((double) pow((I - i) * (double) delta, (double) 2) + pow((double) (J - jj) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj] = 0; y = 0; } else { shadow[i][jj] = 1; } } } } } } } else { for( int j = 0; j < cols; j++ ) { I = -1; J = -1; y = 0; for( int i = rows - 1; i >= 0; i-- ) { if (!isNovalue(elevImageIterator.getSampleDouble(j, i, 0))) { if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I == -1) { I = i; J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; I = i; J = j; } else { shadow[i][j] = 1; } } else if (curvatureImage.getSampleDouble(j, i, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; y = 0; } else { shadow[i][j] = 1; } } } } } } } /*----------------------------------------------------------------------------------------------------------*/ public void orizzonte5( double delta, int quadrata, double beta, double alfa, RandomIter elevImageIterator, WritableRaster curvatureImage, int[][] shadow ) { int rows = curvatureImage.getHeight(); int cols = curvatureImage.getWidth(); /*=====================*/ int y, I, J; double zenith; /*======================*/ for( int j = quadrata; j >= 0; j-- ) { I = -1; J = -1; y = 0; for( int jj = j; jj < quadrata; jj++ ) { for( int i = rows - (int) floor(1 / tan(beta) * (jj - j)) - 1; i >= rows - (int) floor(1 / tan(beta) * (jj - j + 1)) - 1 && i >= 0; i-- ) { if (jj >= quadrata - cols && !isNovalue(elevImageIterator.getSampleDouble(jj - (quadrata - cols), i, 0))) { /*shadow.element[i][jj-(quadrata-Z0.nch)]=j;}}}}*/ if (curvatureImage.getSampleDouble(jj - (quadrata - cols), i, 0) == 1 && I == -1) { I = i; J = jj - (quadrata - cols); y = 1; } else if (curvatureImage.getSampleDouble(jj - (quadrata - cols), i, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(jj - (quadrata - cols), i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - (jj - (quadrata - cols))) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj - (quadrata - cols)] = 0; I = i; J = jj - (quadrata - cols); } else { shadow[i][jj - (quadrata - cols)] = 1; } } else if (curvatureImage.getSampleDouble(jj - (quadrata - cols), i, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(jj - (quadrata - cols), i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - (jj - (quadrata - cols))) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj - (quadrata - cols)] = 0; y = 0; } else { shadow[i][jj - (quadrata - cols)] = 1; } } } } } } } /*----------------------------------------------------------------------------------------------------------*/ public void orizzonte6( double delta, int quadrata, double beta, double alfa, RandomIter elevImageIterator, WritableRaster curvatureImage, int[][] shadow ) { int rows = curvatureImage.getHeight(); int cols = curvatureImage.getWidth(); /*=====================*/ int y, I, J; double zenith; /*======================*/ if (beta != 0) { for( int i = 0; i < quadrata; i++ ) { I = -1; J = -1; y = 0; for( int ii = i; ii >= 0; ii-- ) { for( int j = (int) floor(1 / tan(beta) * (i - ii)); j <= (int) floor(1 / tan(beta) * (i - ii + 1)) - 1 && j < cols; j++ ) { if (ii < rows && !isNovalue(elevImageIterator.getSampleDouble(j, ii, 0))) { /*shadow.element[ii][j]=i;}}}}}*/ if (curvatureImage.getSampleDouble(j, ii, 0) == 1 && I == -1) { I = ii; J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, ii, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator .getSampleDouble(j, ii, 0)) / sqrt(pow((double) (I - ii) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii][j] = 0; I = ii; J = j; } else { shadow[ii][j] = 1; } } else if (curvatureImage.getSampleDouble(j, ii, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator .getSampleDouble(j, ii, 0)) / sqrt((double) pow((I - ii) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii][j] = 0; y = 0; } else { shadow[ii][j] = 1; } } } } } } } else { for( int i = 0; i < rows; i++ ) { I = -1; J = -1; y = 0; for( int j = 0; j < cols; j++ ) { if (!isNovalue(elevImageIterator.getSampleDouble(j, i, 0))) { if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I == -1) { I = i; J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, i, 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; I = i; J = j; } else { shadow[i][j] = 1; } } else if (curvatureImage.getSampleDouble(j, i, 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, i, 0)) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][j] = 0; y = 0; } else { shadow[i][j] = 1; } } } } } } } /*----------------------------------------------------------------------------------------------------------*/ public void orizzonte7( double delta, int quadrata, double beta, double alfa, RandomIter elevImageIterator, WritableRaster curvatureImage, int[][] shadow ) { int rows = curvatureImage.getHeight(); int cols = curvatureImage.getWidth(); /*=====================*/ int y, I, J; double zenith; /*======================*/ for( int i = quadrata - 1; i >= 0; i-- ) { I = -1; J = -1; y = 0; for( int ii = i; ii < quadrata - 1; ii++ ) { for( int j = (int) floor(1 / tan(beta) * (ii - i)); j <= (int) floor(1 / tan(beta) * (ii - i + 1)) - 1 && j < cols; j++ ) { if (ii >= (rows + 2 * cols) && !isNovalue(elevImageIterator.getSampleDouble(j, ii - (rows + 2 * cols), 0))) { /*shadow.element[ii-(Z0.nrh+2*Z0.nch)][j]=i;}}}}*/ if (curvatureImage.getSampleDouble(j, ii - (rows + 2 * cols), 0) == 1 && I == -1) { I = ii - (rows + 2 * cols); J = j; y = 1; } else if (curvatureImage.getSampleDouble(j, ii - (rows + 2 * cols), 0) == 1 && I != -1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, ii - (rows + 2 * cols), 0)) / sqrt(pow((double) (I - (ii - (rows + 2 * cols))) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii - (rows + 2 * cols)][j] = 0; I = ii - (rows + 2 * cols); J = j; } else { shadow[ii - (rows + 2 * cols)][j] = 1; } } else if (curvatureImage.getSampleDouble(j, ii - (rows + 2 * cols), 0) == 0 && y == 1) { zenith = (elevImageIterator.getSampleDouble(J, I, 0) - elevImageIterator.getSampleDouble(j, ii - (rows + 2 * cols), 0)) / sqrt(pow((double) (I - (ii - (rows + 2 * cols))) * (double) delta, (double) 2) + pow((double) (J - j) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[ii - (rows + 2 * cols)][j] = 0; y = 0; } else { shadow[ii - (rows + 2 * cols)][j] = 1; } } } } } } } /*----------------------------------------------------------------------------------------------------------*/ public void orizzonte8( double delta, int quadrata, double beta, double alfa, double[][] Z0, int[][] curv, int[][] shadow, double novalue ) { /*=====================*/ int y, I, J; double zenith; /*======================*/ for( int j = quadrata; j >= 0; j-- ) { I = -1; J = -1; y = 0; for( int jj = j; jj < quadrata; jj++ ) { for( int i = (int) floor(1 / tan(beta) * (jj - j)) + 1; i <= (int) floor(1 / tan(beta) * (jj - j + 1)) && i <= Z0.length; i++ ) { if (jj > quadrata - Z0[0].length && Z0[i][jj - (quadrata - Z0[0].length)] != novalue) { /*shadow.element[i][jj-(quadrata-Z0.nch)]=j;}}}}*/ if (curv[i][jj] == 1 && I == -1) { I = i; J = jj - (quadrata - Z0[0].length); y = 1; } else if (curv[i][jj - (quadrata - Z0[0].length)] == 1 && I != 1) { zenith = (Z0[I][J] - Z0[i][jj - (quadrata - Z0[0].length)]) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - (jj - (quadrata - Z0[0].length))) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj - (quadrata - Z0[0].length)] = 0; I = i; J = jj - (quadrata - Z0[0].length); } else { shadow[i][jj - (quadrata - Z0[0].length)] = 1; } } else if (curv[i][jj - (quadrata - Z0[0].length)] == 0 && y == 1) { zenith = (Z0[I][J] - Z0[i][jj - (quadrata - Z0[0].length)]) / sqrt(pow((double) (I - i) * (double) delta, (double) 2) + pow((double) (J - (jj - (quadrata - Z0[0].length))) * (double) delta, (double) 2)); if (zenith <= tan(alfa)) { shadow[i][jj - (quadrata - Z0[0].length)] = 0; y = 0; } else { shadow[i][jj - (quadrata - Z0[0].length)] = 1; } } } } } } } }