AcresLidarCanopy.h#
Acres/Source/Acres/AcresLidarCanopy.h Generated
FAcresLidarCropModel#
Parameters of the crop and ground cover returns. The defaults are the values of the game.
| Name | Type | Unit | Default | Description |
|---|---|---|---|---|
DefaultHeightM |
static constexpr double |
m | Calibrated full-height defaults: corn, soybean, potato. Render-mesh bounds are not canopy heights. | |
FillPerCell, CoverFillPerCell |
double |
Probability that one cell of CellM inside a canopy stops the beam, for corn, soybean and potato (AcresSensors.cpp FarCropFill: 0.1 m x G x leaf area density, G = 0.5), and for the grass ground cover. | ||
PlantsFillScale |
double |
1 |
A factor on the same probability of the plants of a place with no crop of the map (FAcresLidarCanopy::KindPlants). Each such patch has its own measured probability (FAcresLidarCanopy::Add). | |
CellM, StepM |
double |
Cell size of the plants and step of the walk along the beam, m. | ||
HeightScale |
double |
Factor on the canopy height of each crop kind (1: the height of the growth state; 0.03: all cut, the stubble of the game; 0: no crop of that kind). For studies of a site whose crop state is not known. | ||
CrushedShare, HarvestedShare |
double |
Height of a crushed and of a harvested sample as a share of the canopy height (the game: 12 % and 3 %). | ||
CoverMaxPathM |
double |
m | 3 |
The longest walk through the ground cover in front of a ground hit, m. |
bTopStretch |
bool |
true |
True: a canopy that the beam enters through its top stretches the echo as level ground at that height does (AcresLidarPhysics::PulsePeakFactor with the vertical divergence). The footprint of a beam that goes down into a low crop, into stubble or into the grass cover at a low angle has a long range extent, as on the ground. False: no stretch for plants, the rule of the game (its far crops and its stubble then give returns where bare ground gives none). | |
bTopRelief |
bool |
true |
True: the top of a canopy has the relief of the ground below it. The stretch of bTopStretch then uses the tilt of the ground material at the place of the plant cell (FAcresLidarPattern::GroundMicroSlopeDeg), as a ground hit does. Cut fields lose ground returns at a low angle in the recorded scans as bare soil does (Calibration/Polaris/lidar_results.md, section 7). False: a level top (the versions before 10 October 2026). | |
bCoverCalibrated |
bool |
true |
True: a return from the grass cover has the backscatter of the grass ground below it, and only its range is that of the blade. The reflectivity of the grass material comes from recorded scans of real grass, with its blades. False: the two contributions of the game, (1 - transmission) x grass and the ground behind the blade at the square of the transmission (0.75 times the reflectivity of grass when the two are one echo). |
FAcresLidarCropState#
The crushed and the harvested sample masks of one environment (FAcresFarmState), by the index of a tile patch and by the ordinal of a regional patch. A null map is an empty map.
FAcresLidarCanopy#
The crop patches as the LiDAR sees them: boxes on a lattice with a height, found through a grid.
Fill it with Add (in any order), then call Build. After Build the object is read-only: Trace may run on many threads at once.
Example
FAcresLidarCanopy Canopy;
Canopy.Add(10, 0, 0, 2.4, 0, 0, false);
Canopy.Build();
FAcresLidarOptions Options;
Options.Canopy = &Canopy;
| Name | Type | Unit | Default | Description |
|---|---|---|---|---|
HalfX, HalfY |
static constexpr double |
Half size of a patch along x (east) and y (north), m. | ||
KindPlants |
static constexpr int |
3 |
The kind of a patch of plants that are not a crop of the map (the kinds 0 to 2 are corn, soybean, potato). Such a patch has no crushed and no harvested samples, and HeightScale does not change its height. Its Id is the probability that one of its cells stops a beam, in units of PlantsFillUnit. |
FAcresLidarCanopy::Add#
Adds one patch.
| Argument | Description |
|---|---|
HeightM |
Canopy height at the growth of the field, m. |
Kind |
Crop kind 0 corn, 1 soybean, 2 potato, or KindPlants. |
Id |
Index of a tile patch or ordinal of a regional patch (the key of FAcresLidarCropState). |
bRegion |
True for a regional patch. |
FAcresLidarCanopy::Build#
Makes the grids. Call it one time after the last Add.
FAcresLidarCanopy::Trace#
The first plant cell that stops a ray.
| Argument | Description |
|---|---|
MaxT |
Farthest range, m (the solid hit of the beam). |
State |
Crushed and harvested samples. |
Model |
Fill and height factors. |
T |
Receives the range of the cell, m. |
Kind |
Receives the crop kind. |
bTop |
Receives true when the ray came into the canopy of the cell through its top, and false when it came in through a side (the wall of a field, of a row of patches or of a cut strip). |
Returns: True when a cell stops the ray before MaxT.
FAcresLidarCanopy::CellStops#
True when the plant cell at a point stops a beam with the probability Fill (a fixed value of the cell; the hash of the game, with its axes: X east, Y south).
FAcresLidarCanopy::PatchCount#
Patches added; patches whose lattice cell had the centre of a different patch before (they are found through a list).
FAcresLidarCanopy::PlantPatchCount#
Patches of the kind KindPlants.