Example #1
0
    // Update is called once per frame
    void Update()
    {
        DateTime      aDate  = DateTime.Now;
        WordEmbedding Target = wem.getTarget();

        GameObject[] options = wem.getOptions();

        String outputString = "";

        if (options != null)
        {
            for (int i = 0; i < options.Length; i++)
            {
                GameObject option = options[i];
                outputString += "(" + option.GetComponent <Option>().getWord() + "-" + option.transform.position + ")";
            }
        }
        InsertRecord(run_id, aDate.ToString("yyyy/MM/ddTHH:mm:ss.fffffff"), cam.transform.position.ToString(), cam.transform.rotation.ToString(),
                     leftcontrollerPose.transform.position.ToString(), leftcontrollerPose.transform.rotation.ToString(),
                     rightcontrollerPose.transform.position.ToString(), rightcontrollerPose.transform.rotation.ToString(),
                     teleportAction.GetState(LefthandType), teleportAction.GetState(RighthandType),
                     grabAction.GetState(LefthandType), grabAction.GetState(RighthandType),
                     zoomInAction.GetState(LefthandType), zoomInAction.GetState(RighthandType),
                     zoomOutAction.GetState(LefthandType), zoomOutAction.GetState(RighthandType),
                     wem.word, wem.number_of_neighbours, outputString, wem.getZoom());
    }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        float currentTime = Time.time;

        if (rotationEnabled && !pause && (currentTime > (startTimer + moveWindow)))
        {
            angle += (Time.deltaTime * (2 * Math.PI / secsPerRotation));
            angle %= (2 * Math.PI);
        }

        // Update the scoreboard to rotate to face the user
        scoreboard.transform.rotation = Quaternion.LookRotation(scoreboard.GetComponent <Renderer>().bounds.center - cam.transform.position);

        // If still in preview mode update the target word every ten frames.
        if (preview && (counter % 10 == 0))
        {
            SelectNextTarget();
            // Word has been updated from console
            // Update the target and hard reset positons
        }
        else if (!preview && word != Target.GetWord())
        {
            WordEmbedding we = GetWordEmbedding(word);
            if (we != null)
            {
                SetTarget(we);
                ResetPosition();
            }
            // Number of Neighbours has been updated from console
            // Destory all current option game objects and rebuild
        }
        else if (!preview && k != number_of_neighbours)
        {
            for (int i = 0; i < k + 1; i++)
            {
                GameObject option = options[i];
                UnityEngine.Object.Destroy(option);
            }

            k = number_of_neighbours;
            SetTarget(Target);

            //adjustZoomFromNeighbours();

            // Create game options
            options = new GameObject[k + 1];

            CreateGameObjects();

            // Hard Reset
            ResetPosition();
        }
        counter++;

        if (rotationEnabled && !pause && (currentTime > (startTimer + moveWindow)))
        {
            refreshPosition();
        }
    }
Example #3
0
 // Update the focused target word for the model
 public void SetTarget(WordEmbedding we)
 {
     OldTarget = Target;
     Target    = we;
     word      = Target.GetWord();
     Target.FindNN(embeddings, k);
     text.text = Target.GetWord();
 }
Example #4
0
    public double Distance(WordEmbedding target)
    {
        if (target.vectors.Length != vectors.Length)
        {
            throw new ArgumentOutOfRangeException("Both WordEmbeddings must be of same dimensionality.");
        }
        double sum = 0;

        for (int i = 0; i < vectors.Length; i++)
        {
            sum += ((vectors[i] - target.vectors[i]) * (vectors[i] - target.vectors[i]));
        }
        return(Math.Sqrt(sum));
    }
Example #5
0
    public void SetWordEmbedding(WordEmbedding e)
    {
        we = e;

        text.text = we.GetWord();
    }
Example #6
0
    // Start is called before the first frame update
    void Start()
    {
        counter = 0;
        string line;

        preview = true;

        number_of_neighbours = k;

        // Read the file and display it line by line.
        System.IO.StreamReader file = new System.IO.StreamReader(inputfile);
        line = file.ReadLine();

        string[] subStrings = line.Split(' ');
        count          = System.Convert.ToInt32(subStrings[0]);
        dimensionality = System.Convert.ToInt32(subStrings[1]);

        //count = 10000;
        number_of_neighbours = count - 1;

        embeddings = new WordEmbedding[count];
        double[][] data = new double[count][];

        for (int j = 0; j < count; j++)
        {
            line       = file.ReadLine();
            subStrings = line.Split(' ');
            string currentword = subStrings[0];

            double[] currentVectors = new double[dimensionality];
            for (int i = 0; i < dimensionality; i++)
            {
                currentVectors[i] = System.Convert.ToDouble(subStrings[(i + 1)]);
            }
            data[counter] = currentVectors;

            WordEmbedding Target = new WordEmbedding(currentword, currentVectors);

            embeddings[counter] = Target;

            counter++;
        }
        file.Close();

        TSNE tSNE = new TSNE()
        {
            NumberOfOutputs = 3,
            Perplexity      = 5
        };

        double[][] finalData = tSNE.Transform(data);
        counter = 0;

        double[] maxs = { 0, 0, 0 };
        double[] mins = { 0, 0, 0 };

        for (int j = 0; j < count; j++)
        {
            WordEmbedding Target = embeddings[j];

            double[] pcavectors = new double[3];
            for (int k = 0; k < 3; k++)
            {
                pcavectors[k] = finalData[j][k];
                if (pcavectors[k] > maxs[k])
                {
                    maxs[k] = pcavectors[k];
                }
                else if (pcavectors[k] < mins[k])
                {
                    mins[k] = pcavectors[k];
                }
            }

            Target.SetPCAVectors(pcavectors);
            embeddings[j] = Target;
        }

        // Set intial sample word
        SetTarget(embeddings[0]);
        adjustZoomFromNeighbours();
        CreateGameObjects();
    }
Example #7
0
 // Select the next sample target word
 private void SelectNextTarget()
 {
     Target = embeddings[(counter / 10) % count];
     Target.FindNN(embeddings, k);
     text.text = Target.GetWord();
 }
Example #8
0
 // Constructor
 public WordEmbeddingDistance(WordEmbedding w, double d, double[] p)
 {
     word        = w;
     distance    = d;
     pcadistance = p;
 }