public void SetParallelPlot(DataRow dataRow, Vector3 pos, DataPointHandler prevDataPoint, int count) { lineRenderer = GetComponent <LineRenderer>(); lineRenderer.enabled = true; endMarker = new Vector3(pos.x, (float)dataRow.kNNValues[count] * 2, pos.z); PreviousDataPoint = prevDataPoint; DataRow = dataRow; RegressionValue = dataRow.RegressionValue; ShouldInterpolate = true; startTime = Time.time; if (DataPointSpawner.Instance.ShouldUseRegressor) { float diff = (float)(dataRow.LabelID - dataRow.RegressionValue); float eval = DataPointSpawner.Instance.IncremenetGradientValue * dataRow.LabelID; eval += diff; if (eval > 1) { eval = 1; } if (eval < 0) { eval = 0; } Color = DataPointSpawner.Instance.gradient.Evaluate(eval); } else { Color = DataPointSpawner.Instance.Colors[DataRow.LabelID]; } if (MeshRenderer == null) { MeshRenderer = GetComponent <MeshRenderer>(); } MeshRenderer.material.color = Color; }
private void Update() { if (ShouldResetDataPoints) { ResetDatapoints(); Colors.Clear(); ShouldResetDataPoints = false; } while (DataPoints.Count > 0) { var dp = DataPoints.Dequeue(); if (Colors.Count <= 0) { if (ShouldUseRegressor) { Colors.Add(UnityEngine.Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f)); Colors.Add(UnityEngine.Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f)); } else { foreach (var feature in KNNController.Instance.Labels) { Colors.Add(UnityEngine.Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f)); } } GradientColorKey[] colorKey = new GradientColorKey[Colors.Count]; GradientAlphaKey[] alphaKey = new GradientAlphaKey[Colors.Count]; float incremenetTime = 0f; IncremenetGradientValue = Colors.Count / 2; for (int i = 0; i < Colors.Count; i++) { colorKey[i] = new GradientColorKey(Colors[i], incremenetTime); alphaKey[i] = new GradientAlphaKey(1f, incremenetTime); incremenetTime += IncremenetGradientValue; } gradient.SetKeys(colorKey, alphaKey); } if (shouldUseScatterPlot) { var prefab = Instantiate(DataPointPrefab).GetComponent <DataPointHandler>(); SpawnedDatapoints.Add(prefab); prefab.SetScatterPlotPrediction(dp); } else if (shouldUseParallelPlot) { if (!CategoryExists) { InstantiateCategories(); CategoryExists = true; } DataPointHandler PrevDataPoint = null; int count = 0; foreach (var category in Categories) { var prefab = Instantiate(DataPointPrefab).GetComponent <DataPointHandler>(); SpawnedDatapoints.Add(prefab); prefab.SetParallelPlot(dp, category.transform.position, PrevDataPoint, count); PrevDataPoint = prefab; count++; } } else // Matrix plot { var matrix = MatrixCategoryMap[$"{dp.FeatureIDs[0]}{dp.FeatureIDs[1]}"]; var partner = MatrixCategoryMap[$"{dp.FeatureIDs[1]}{dp.FeatureIDs[0]}"]; Vector3 offset = new Vector3(0, 0, 0); DataPointHandler prefab = Instantiate(DataPointPrefab).GetComponent <DataPointHandler>(); if (dp.FeatureIDs[0] < dp.FeatureIDs[1]) { offset = new Vector3( partner.transform.position.x - matrix.PositionOffsetForPlot.x + ((float)dp.kNNValues[1] / BiggestValuePairY[dp.FeatureIDs[1]]) * matrix.transform.lossyScale.y, matrix.transform.position.y - matrix.PositionOffsetForPlot.y + ((float)dp.kNNValues[0] / BiggestValuePairX[dp.FeatureIDs[0]]) * matrix.transform.lossyScale.x, matrix.transform.position.z + matrix.PositionOffsetForPlot.z); } else { offset = new Vector3( partner.transform.position.x - matrix.PositionOffsetForPlot.x + ((float)dp.kNNValues[0] / BiggestValuePairX[dp.FeatureIDs[0]]) * matrix.transform.lossyScale.x, matrix.transform.position.y - matrix.PositionOffsetForPlot.y + ((float)dp.kNNValues[1] / BiggestValuePairY[dp.FeatureIDs[1]]) * matrix.transform.lossyScale.y, matrix.transform.position.z + matrix.PositionOffsetForPlot.z); } prefab.SetMatrixPLot(dp, offset); SpawnedDatapoints.Add(prefab); } } }