Beispiel #1
0
        /// <summary>
        /// Interpolate values from source (element values) to target points.
        /// </summary>
        public void InterpolateElmtToTarget(float[] sourceElementValues, float[] target)
        {
            // Firstly, interpolate to node values
            _nodeInterpolator.Interpolate(sourceElementValues, _nodeValues);

            if (_elmtValueInterpolationType == ElmtValueInterpolationType.NodeValues)
            {
                InterpolateNodeToTarget(_nodeValues, target);
                return;
            }

            for (int i = 0; i < _targetsElmtNode.Count; i++)
            {
                InterpElmtNode.Weights weights = _targetsElmtNode[i];
                if (weights.Element1Index < 0)
                {
                    // target not included in source
                    target[i] = _deleteValueFloat;
                }
                else
                {
                    target[i] = (float)_interpEN.GetValue(weights,
                                                          sourceElementValues[weights.Element1Index],
                                                          sourceElementValues[weights.Element2Index],
                                                          _nodeValues[weights.NodeIndex]);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Interpolate element values to the (x,y) coordinate.
        /// <para>
        /// It is required to first calculate node values from
        /// element center values. Check out <see cref="NodeInterpolator"/>.
        /// </para>
        /// </summary>
        /// <param name="x">X coordinate</param>
        /// <param name="y">Y coordinate</param>
        /// <param name="elmtValues">Element center values</param>
        /// <param name="nodeValues">Node values</param>
        public double InterpolateElmtToXY(double x, double y, double[] elmtValues, double[] nodeValues)
        {
            // Find element that includes the (x,y) coordinate
            int element = _ssearcher.FindElement(x, y);

            // Check if element has been found, i.e. includes the (x,y) point
            if (element >= 0)
            {
                InterpElmtNode.Weights weights = InterpElmtNode.InterpolationWeights(x, y, element, _smesh);
                return(_interpEN.GetValue(weights, elmtValues, nodeValues));
            }

            return(DeleteValue);
        }