123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /* calcsurf.c */
- #include <stdlib.h>
- #include <grass/gis.h>
- #include <grass/raster.h>
- #include "ransurf.h"
- #include "local_proto.h"
- void CalcSurface(void)
- {
- int Count, OutRows, OutCols;
- int Row, Row2, Col, Col2, RanRows, RanCols;
- int owC, oeC, onR, osR, wC, eC, nR, sR;
- double **Randoms;
- G_debug(2, "CalcSurface()");
- OutRows = BigF.RowPlus;
- OutCols = BigF.ColPlus;
- RanRows = (2 * OutRows + Rs);
- RanCols = (2 * OutCols + Cs);
- owC = osR = 0;
- wC = OutCols;
- sR = OutRows;
- oeC = RanCols - 1;
- onR = RanRows - 1;
- if (OutCols > 0)
- eC = RanCols - (OutCols + 1);
- else
- eC = oeC;
- if (OutRows > 0)
- nR = RanRows - (OutRows + 1);
- else
- nR = onR;
- Randoms = (double **)G_malloc(sizeof(double *) * RanRows);
- for (Row = 0; Row < RanRows; Row++)
- Randoms[Row] = (double *)G_malloc(RanCols * sizeof(double));
- /* OLD
- for( Row = OutRows; Row < RanRows; Row++) {
- for( Col = OutCols; Col < OutCols + Cs; Col++) {
- Randoms[ Row][ Col] = GasDev();
- }
- }
- for( Row = OutRows - 1; Row >= 0; Row--) {
- for( Col = OutCols; Col < OutCols + Cs; Col++) {
- Randoms[ Row][ Col] = GasDev();
- }
- }
- for( Row = 0; Row < RanRows; Row++) {
- for( Col = 0; Col < OutCols; Col++)
- Randoms[ Row][ Col] = GasDev();
- for( Col = OutCols + Cs; Col < RanCols; Col++)
- Randoms[ Row][ Col] = GasDev();
- }
- end OLD */
- for (Row = sR; Row <= nR; Row++) {
- for (Col = wC; Col <= eC; Col++) {
- Randoms[Row][Col] = GasDev();
- }
- }
- Col = wC - 1;
- Col2 = eC + 1;
- while (Col >= 0) {
- for (Row = sR; Row <= nR; Row++) {
- Randoms[Row][Col] = GasDev();
- Randoms[Row][Col2] = GasDev();
- }
- Col--;
- Col2++;
- }
- Row = sR - 1;
- Row2 = nR + 1;
- while (Row >= 0) {
- for (Col = 0; Col < RanCols; Col++) {
- Randoms[Row][Col] = GasDev();
- Randoms[Row2][Col] = GasDev();
- }
- Row--;
- Row2++;
- }
- Count = 0;
- if (FDM == -1) {
- for (Row = 0; Row < Rs; Row++) {
- if (ODD(Row)) {
- for (Col = Cs - 1; Col >= 0; Col--) {
- G_percent(Count++, MapCount, 1);
- Surface[Row][Col] =
- MakePP(Row, Col, OutRows, OutCols, Randoms, BigF);
- }
- }
- else {
- for (Col = 0; Col < Cs; Col++) {
- G_percent(Count++, MapCount, 1);
- Surface[Row][Col] =
- MakePP(Row, Col, OutRows, OutCols, Randoms, BigF);
- }
- }
- }
- G_percent(1, 1, 1);
- }
- else {
- for (Row = 0; Row < Rs; Row++) {
- Rast_get_c_row_nomask(FDM, CellBuffer, Row);
- if (ODD(Row)) {
- for (Col = Cs - 1; Col >= 0; Col--) {
- if (CellBuffer[Col] == 0)
- Surface[Row][Col] = 0.0;
- else {
- G_percent(Count++, MapCount, 1);
- Surface[Row][Col] =
- MakePP(Row, Col, OutRows, OutCols, Randoms, BigF);
- }
- }
- }
- else {
- for (Col = 0; Col < Cs; Col++) {
- if (CellBuffer[Col] == 0)
- Surface[Row][Col] = 0.0;
- else {
- G_percent(Count++, MapCount, 1);
- Surface[Row][Col] =
- MakePP(Row, Col, OutRows, OutCols, Randoms, BigF);
- }
- }
- }
- }
- G_percent(1, 1, 1);
- }
- G_free(Randoms);
- }
|