示例#1
0
        public float?GetAverageHeightFromNeighbourhood(int pKernelSizeMultiplier)
        {
            int pKernelSize = CGroundArray.GetKernelSize();

            pKernelSize *= pKernelSizeMultiplier;

            int   defined   = 0;
            float heightSum = 0;

            for (int x = -pKernelSize; x < pKernelSize; x++)
            {
                for (int y = -pKernelSize; y < pKernelSize; y++)
                {
                    int    xIndex = indexInField.Item1 + x;
                    int    yIndex = indexInField.Item2 + y;
                    CField el     = GetFieldWithOffset(x, y);
                    if (el != null && el.IsDefined())
                    {
                        defined++;
                        heightSum += (float)el.GetHeight();
                    }
                }
            }
            if (defined == 0)
            {
                return(null);
            }
            return(heightSum / defined);
        }
示例#2
0
        /// <summary>
        /// Sets SmoothHeight based on average from neighbourhood
        /// </summary>
        public void CalculateSmoothHeight(double[,] pGaussKernel)
        {
            if (!IsDefined())
            {
                return;
            }

            //int defined = 0;
            float heightSum = 0;

            float midHeight = (float)GetHeight();

            int kernelSize = CGroundArray.GetKernelSize();

            float gaussWeightSum = 0;

            for (int x = 0; x < kernelSize; x++)
            {
                for (int y = 0; y < kernelSize; y++)
                {
                    int    xIndex   = indexInField.Item1 + x - kernelSize / 2;
                    int    yIndex   = indexInField.Item2 + y - kernelSize / 2;
                    CField el       = CProjectData.Points.groundArray.GetField(xIndex, yIndex);
                    float? elHeight = el?.GetHeight();

                    //if element is not defined, use height from the middle element
                    float definedHeight = midHeight;
                    if (elHeight != null)
                    {
                        definedHeight = (float)elHeight;
                    }
                    float gaussWeight = (float)pGaussKernel[x, y];
                    gaussWeightSum += gaussWeight;
                    heightSum      += definedHeight * gaussWeight;
                }
            }

            SmoothHeight = heightSum;
        }