public static TransformAndHomogeneousDivide ( Vector3 vector3, Matrix matrix ) : Vector3 | ||
vector3 | Vector3 | |
matrix | Matrix | |
리턴 | Vector3 |
private static double CalculateEdgeWeights(Edge <Vector3> edge, Matrix volumeIndexToNormalizedVolumeCoordinates) { var dSquared = Vector3.DistanceSquared(MathUtil.TransformAndHomogeneousDivide(edge.Source, volumeIndexToNormalizedVolumeCoordinates), MathUtil.TransformAndHomogeneousDivide(edge.Target, volumeIndexToNormalizedVolumeCoordinates)); var d = Math.Sqrt(dSquared); return(dSquared + d); }
private static Dictionary <IList <Edge> > AugmentDelaunyEdges(Dictionary <NeuralProcessDescription> neuralProcessDescriptions, Dictionary <IList <Edge> > delaunyEdges, Matrix volumeIndexToNormalizedVolumeCoordinates) { var augmentedDelaunyEdges = new Dictionary <IList <Edge> > { Internal = new ObservableDictionary <string, IList <Edge> >(delaunyEdges.Internal.ToDictionary(x => x.Key, x => x.Value)) }; foreach (var neuralProcessDescription in neuralProcessDescriptions.Internal.Values) { foreach (var breadcrumbDescription in neuralProcessDescription.BreadcrumbDescriptions) { var tmpBreadcrumbDescription = breadcrumbDescription; var nearestBreadcrumb = neuralProcessDescription.BreadcrumbDescriptions .ToList() .Where(nearbyBreadcrumb => !nearbyBreadcrumb.Position.Equals(tmpBreadcrumbDescription.Position)) .ArgMin( nearbyBreadcrumb => Vector3.Distance( MathUtil.TransformAndHomogeneousDivide(tmpBreadcrumbDescription.Position, volumeIndexToNormalizedVolumeCoordinates), MathUtil.TransformAndHomogeneousDivide(nearbyBreadcrumb.Position, volumeIndexToNormalizedVolumeCoordinates))); var secondNearestBreadcrumb = neuralProcessDescription.BreadcrumbDescriptions .ToList() .Where( nearbyBreadcrumb => !nearbyBreadcrumb.Position.Equals(tmpBreadcrumbDescription.Position) && !nearbyBreadcrumb.Position.Equals(nearestBreadcrumb.Position)) .ArgMin( nearbyBreadcrumb => Vector3.Distance( MathUtil.TransformAndHomogeneousDivide(tmpBreadcrumbDescription.Position, volumeIndexToNormalizedVolumeCoordinates), MathUtil.TransformAndHomogeneousDivide(nearbyBreadcrumb.Position, volumeIndexToNormalizedVolumeCoordinates))); augmentedDelaunyEdges.Get(neuralProcessDescription.Name).Add(new Edge { P1 = breadcrumbDescription.Position, P2 = nearestBreadcrumb.Position }); augmentedDelaunyEdges.Get(neuralProcessDescription.Name).Add(new Edge { P1 = breadcrumbDescription.Position, P2 = secondNearestBreadcrumb.Position }); } } return(augmentedDelaunyEdges); }