Exemple #1
0
    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);
            }
        }
    }