Esempio n. 1
0
        public Record getPredict(string ctsMarker, ClientObjectAttribute cl)
        {
            Program dbscan = new Program();
            //Debug.Log("!!!!!!!!!!!!!Start Dbscan!!!!!!!!!!!!!");
            List <int>         clusterIds;
            List <Cluster>     clusterDes;
            HashSet <Record[]> _clusters        = dbscan.Dbscan(out clusterIds, out clusterDes);
            Predict            predict          = new Predict();
            List <Record>      gazePoints       = preGaze.getGazePoints(getAllBrowseRecord());
            List <Record>      predictedCluster = predict.GetPredictedCluster(
                new Vector3(cl.CameraPosX, cl.CameraPosY, cl.CameraPosZ),
                new Vector3(cl.CameraRotX, cl.CameraRotY, cl.CameraRotZ),
                _clusters, clusterDes
                );
            Record  posRange = getRangeRecord(predictedCluster);
            Vector3 tmpPos   = pathHistory[ctsMarker].cameraPos;
            Vector3 rot;
            float   x_sum = 0, y_sum = 0, z_sum = 0, x_rot = 0, y_rot = 0, z_rot = 0;

            foreach (var j in predictedCluster)
            {
                x_sum += (float)j.posX;
                y_sum += (float)j.posY;
                z_sum += (float)j.posZ;
                x_rot += (float)j.rotX;
                y_rot += (float)j.rotY;
                z_rot += (float)j.rotZ;
            }
            float x_ave    = x_sum / predictedCluster.Count;
            float y_ave    = y_sum / predictedCluster.Count;
            float z_ave    = z_sum / predictedCluster.Count;
            float x_averot = x_rot / predictedCluster.Count;
            float y_averot = y_rot / predictedCluster.Count;
            float z_averot = z_rot / predictedCluster.Count;

            if (tmpPos.x <= posRange.posX && tmpPos.y <= posRange.posY && tmpPos.z <= posRange.posZ &&
                tmpPos.x >= posRange.rotX && tmpPos.y >= posRange.rotY && tmpPos.z >= posRange.rotZ)
            {
                rot = new Vector3(x_averot, y_averot, z_averot);
            }
            else
            {
                rot = new Vector3(x_ave, y_ave, z_ave);
                rot = rot - tmpPos;
            }
            //------

            /*if (predictedCluster != null)
             * {
             *  //把块变成坐标系
             *  var exchangeAxis = new ExchangeAxis();
             *  Record pos = new Record(exchangeAxis.ModelIndex_to_unityPos(x_ave, y_ave, z_ave), new Vector3(x_averot, y_averot, z_averot));
             *  return pos;
             *
             * }
             * else { Debug.Log("No suggestion"); }*/
            return(new Record(MoveForwardPredict(pathHistory[ctsMarker], rot), rot));
        }
Esempio n. 2
0
        public Record getPredict(string ctsMarker, ClientObjectAttribute cl)
        {
            Debug.Log("Start predict");
            Predict       predict          = new Predict();
            List <Record> gazePoints       = preGaze.getGazePoints(getAllBrowseRecord());
            Cluster       predictedCluster = predict.GetPredictedCluster(
                new Vector3(cl.CameraPosX, cl.CameraPosY, cl.CameraPosZ),
                new Vector3(cl.CameraRotX, cl.CameraRotY, cl.CameraRotZ),
                clusterNet, gazePoints);
            //Record posRange = getRangeRecord(predictedCluster);
            Vector3 tmpPos = pathHistory[ctsMarker].cameraPos;
            //float x_sum = 0, y_sum = 0, z_sum = 0, x_rot = 0, y_rot = 0, z_rot = 0;
            //foreach (var j in predictedCluster)
            //{
            //    x_sum += (float)j.posX;
            //    y_sum += (float)j.posY;
            //    z_sum += (float)j.posZ;
            //    x_rot += (float)j.rotX;
            //    y_rot += (float)j.rotY;
            //    z_rot += (float)j.rotZ;
            //}
            //float x_ave = x_sum / predictedCluster.Count;
            //float y_ave = y_sum / predictedCluster.Count;
            //float z_ave = z_sum / predictedCluster.Count;
            Vector3 cluterPos = predictedCluster.center;
            //float x_averot = x_rot / predictedCluster.Count;
            //float y_averot = y_rot / predictedCluster.Count;
            //float z_averot = z_rot / predictedCluster.Count;
            Vector3 rot = cluterPos - tmpPos;

            //if (tmpPos.x <= posRange.posX && tmpPos.y <= posRange.posY && tmpPos.z <= posRange.posZ
            //    && tmpPos.x >= posRange.rotX && tmpPos.y >= posRange.rotY && tmpPos.z >= posRange.rotZ)
            //{
            //    rot = new Vector3(x_averot, y_averot, z_averot);
            //}
            //else
            //{
            //    rot = new Vector3(x_ave, y_ave, z_ave);
            //    rot = rot - tmpPos;
            //}
            //------

            /*if (predictedCluster != null)
             * {
             *  //把块变成坐标系
             *  var exchangeAxis = new ExchangeAxis();
             *  Record pos = new Record(exchangeAxis.ModelIndex_to_unityPos(x_ave, y_ave, z_ave), new Vector3(x_averot, y_averot, z_averot));
             *  return pos;
             *
             * }
             * else { Debug.Log("No suggestion"); }*/
            return(new Record(MoveForwardPredict(pathHistory[ctsMarker], rot), rot));
        }