//this calculates the distance list //And works private void calculateNearestNeighborGraph(KPoint.DistType distType) { points = new PointSet(pointSetFile); graphPrefix = pointSetFileShort.Substring(0, pointSetFileShort.IndexOf('.')) + "_" + distType.ToString() + "_KNN_"; //Now we set the Distance //Dista nce matrix distMatrix = points.GetDistanceMatrix(distType); distances = distMatrix.GetSortedDistanceList(); minConnectIndex = LightWeightGraph.BinSearchKNNMinConnectivity(2, points.Count - 1, points.Count, distMatrix); label1.Text = String.Format("Minimum Connectivity:({0} Neighbors)", minConnectIndex); float sum = distances.Cast <float>().Sum(); sum /= distances.Count; label4.Text = "Mean Dist:" + sum; //Set the track bars trackBar1.Minimum = 2; trackBar1.Maximum = minConnectIndex; trackBar2.Minimum = minConnectIndex; trackBar2.Maximum = points.Count - 1; trackBar1.Value = trackBar2.Value = minConnectIndex; distMin.Text = String.Format("Min:({0} Neighbors)", trackBar1.Value); distMax.Text = String.Format("Max:({0} Neighbors)", trackBar2.Value); }
public DistanceMatrix GetDistanceMatrix(KPoint.DistType distType = KPoint.DistType.Euclidean) { float[,] distMatrix = new float[Count, Count]; for (int i = 0; i < Count - 1; i++) { for (int j = 0; j < Count; j++) { distMatrix[i, j] = distMatrix[j, i] = (float)PointList[i].GetDistance(PointList[j], distType); } } return(new DistanceMatrix(distMatrix)); }
private void calculateSMST(KPoint.DistType distType) { points = new PointSet(pointSetFile); graphPrefix = pointSetFileShort.Substring(0, pointSetFileShort.IndexOf('.')) + "_" + distType.ToString() + "_MST_"; int max = points.Count / 2; trackBar1.Minimum = 1; trackBar1.Maximum = max; trackBar1.Value = 1; trackBar2.Minimum = 1; trackBar2.Maximum = max; trackBar2.Value = 1; trackBar2.Enabled = false; numericUpDown1.Enabled = false; label1.Text = ""; label4.Text = ""; distMax.Text = ""; distMin.Text = "Number of MSTs: 1"; }
//this calculates the distance list private void CalculateMinConnectivityGeoGraph(KPoint.DistType distType) { points = new PointSet(pointSetFile); graphPrefix = pointSetFileShort.Substring(0, pointSetFileShort.IndexOf('.')) + "_" + distType.ToString() + "_"; //Now we set the Distance //Distance matrix distMatrix = points.GetDistanceMatrix(distType); distances = distMatrix.GetSortedDistanceList(); //Find minimum Connectivity (can make this binary search) int pointCount = points.Count; minConnectIndex = LightWeightGraph.BinSearchGeoMinConnectivity(0, distances.Count - 1, pointCount, distMatrix, distances); label1.Text = String.Format("Minimum Connectivity:({0})={1}", minConnectIndex, distances[minConnectIndex]); float sum = 0; foreach (float dist in distances) { sum += dist; } sum /= distances.Count; label4.Text = "Mean Dist:" + sum; //Set the track bars trackBar1.Minimum = 0; trackBar1.Maximum = minConnectIndex; trackBar2.Minimum = minConnectIndex; trackBar2.Maximum = distances.Count - 1; trackBar1.Value = trackBar2.Value = minConnectIndex; distMin.Text = String.Format("Min:({0}) {1}", trackBar1.Value, distances[trackBar1.Value]); distMax.Text = String.Format("Max:({0}) {1}", trackBar2.Value, distances[trackBar2.Value]); }
private void callCalcDist() { if (!formLoaded) { return; } trackBar2.Enabled = true; numericUpDown1.Enabled = true; KPoint.DistType distType = KPoint.DistType.Euclidean; if (DistanceMetricSelect.SelectedIndex == 1) { distType = KPoint.DistType.PMCC; } else if (DistanceMetricSelect.SelectedIndex == 2) { distType = KPoint.DistType.Manhattan; } else if (DistanceMetricSelect.SelectedIndex == 3) { distType = KPoint.DistType.Chebyshev; } if (embeddingComboBox.SelectedIndex == 0) { CalculateMinConnectivityGeoGraph(distType); } else if (embeddingComboBox.SelectedIndex == 1) { calculateNearestNeighborGraph(distType); } else //stacked MSTs { calculateSMST(distType); } }