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)); }
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)); }
public PointDistanceDecayField(ITensorField field, Vector2 center, float decay) { Contract.Requires(field != null); _field = field; _center = center; _decay = decay; }
public static Tensor Sample(this ITensorField field, Vector2 position) { Contract.Requires(field != null); Tensor result; field.Sample(ref position, out result); return(result); }
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; }