Exemple #1
0
        public static ITensorField DecayDistanceFromPoint(this ITensorField field, Vector2 center, float decay)
        {
            Contract.Requires(field != null);
            Contract.Ensures(Contract.Result <ITensorField>() != null);

            return(new PointDistanceDecayField(field, center, decay));
        }
Exemple #2
0
        public static IEigenField Presample(this ITensorField field, Vector2 min, Vector2 max, uint resolution)
        {
            Contract.Requires(field != null);
            Contract.Ensures(Contract.Result <IEigenField>() != null);

            return(ResampleAndRescale.Create(field, min, max, resolution));
        }
Exemple #3
0
        public PointDistanceDecayField(ITensorField field, Vector2 center, float decay)
        {
            Contract.Requires(field != null);

            _field  = field;
            _center = center;
            _decay  = decay;
        }
Exemple #4
0
        public static Tensor Sample(this ITensorField field, Vector2 position)
        {
            Contract.Requires(field != null);

            Tensor result;

            field.Sample(ref position, out result);
            return(result);
        }
Exemple #5
0
        public TracingConfiguration(BaseScalarField priorityField, BaseScalarField separationField, ITensorField tensorField, IValueGenerator roadWidth,
                                    float searchAngle   = 0.3926991f, //22.5 degrees in radians
                                    float segmentLength = 10,
                                    float mergeDistance = 25
                                    )
        {
            Contract.Requires(priorityField != null);
            Contract.Requires(separationField != null);
            Contract.Requires(tensorField != null);
            Contract.Requires(roadWidth != null);

            _priorityField          = priorityField;
            _separationField        = separationField;
            _tensorField            = tensorField;
            _roadWidth              = roadWidth;
            _consineSearchConeAngle = (float)Math.Cos(searchAngle);
            _segmentLength          = segmentLength;
            _mergeDistance          = mergeDistance;
        }
        public static IEigenField Create(ITensorField baseField, Vector2 min, Vector2 max, uint resolution)
        {
            var major = new Vector2[resolution + 1, resolution + 1];

            Parallel.For(0, resolution + 1, i =>
                         Parallel.For(0, resolution + 1, j => {
                var p = new Vector2(i / (float)resolution, j / (float)resolution) + (min / new Vector2(resolution, resolution));

                Tensor t;
                baseField.Sample(ref p, out t);

                Vector2 majEigen, minEigen;
                t.EigenVectors(out majEigen, out minEigen);

                major[i, j] = majEigen;
            })
                         );

            return(new ResampleAndRescale(major, min, max));
        }
        public void Add(ITensorField field)
        {
            Contract.Requires(field != null);

            _fields.Add(field);
        }
 public void Blend(ITensorField field, float weight = 1)
 {
     _blends.Add(new KeyValuePair <ITensorField, float>(field, weight));
     _totalWeight += weight;
 }