TransformAndHomogeneousDivide() 공개 정적인 메소드

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);
        }