void DBGridIF::RecalcStats(DBObjRecord *layerRec) { DBInt obsNum = 0; DBPosition pos; DBFloat value, cellArea; DBFloat sumWeight = 0.0, minimum = DBHugeVal, maximum = -DBHugeVal, average = 0.0, stdDev = 0.0; for (pos.Row = 0; pos.Row < RowNum(); ++pos.Row) for (pos.Col = 0; pos.Col < ColNum(); ++pos.Col) if (Value(layerRec, pos, &value)) { cellArea = CellArea(pos); sumWeight += cellArea; average = average + value * cellArea; minimum = minimum < value ? minimum : value; maximum = maximum > value ? maximum : value; stdDev = stdDev + value * value * cellArea; obsNum++; } if (obsNum > 0) { average = average / sumWeight; stdDev = stdDev / sumWeight; stdDev = stdDev - average * average; stdDev = sqrt(stdDev); } else average = stdDev = minimum = maximum = MissingValue(); layerRec = ItemTable->Item(layerRec->RowID()); AverageFLD->Float(layerRec, average); MinimumFLD->Float(layerRec, minimum); MaximumFLD->Float(layerRec, maximum); StdDevFLD->Float(layerRec, stdDev); }
void DBGridIF::DiscreteStats() { DBInt recordID, layerID; DBFloat area, sumArea = 0.0; DBPosition pos; DBObjTableField *areaFLD = ItemTable->Field(DBrNGridArea); DBObjTableField *percentFLD = ItemTable->Field(DBrNGridPercent); DBObjRecord *layerRec, *record; for (recordID = 0; recordID < ItemTable->ItemNum(); ++recordID) { record = ItemTable->Item(recordID); areaFLD->Float(record, 0.0); percentFLD->Float(record, 0.0); } for (layerID = 0; layerID < LayerNum(); ++layerID) { layerRec = Layer(layerID); for (pos.Row = 0; pos.Row < RowNum(); ++pos.Row) for (pos.Col = 0; pos.Col < ColNum(); ++pos.Col) if ((record = GridItem(layerRec, pos)) != (DBObjRecord *) NULL) { area = CellArea(pos); sumArea += area; areaFLD->Float(record, areaFLD->Float(record) + area); } } for (recordID = 0; recordID < ItemTable->ItemNum(); ++recordID) { record = ItemTable->Item(recordID); percentFLD->Float(record, areaFLD->Float(record) * 100.0 / sumArea); } }
void csRectFlattenModifier::Displace(iTerrainCell* cell, float intensity) const { csRect area = WorldArea(cell); area.Intersect(bb.MinX(), bb.MinY(), bb.MaxX(), bb.MaxY()); area = CellArea(cell, area); //printf("area: %d, %d - %d, %d\n\n", area.xmin, area.ymin%256, area.xmax, area.ymax); csLockedHeightData data = cell->LockHeightData (area); float val = (center.y/cell->GetSize().z)*intensity; for (size_t y = 0; y < size_t (area.Height()); y++) for (size_t x = 0; x < size_t (area.Width()); x++) { data.data[y * data.pitch + x] = val; } cell->UnlockHeightData (); }