public void FindNN(WordEmbedding[] neighbours, int k) { nearestNeighbours = new WordEmbeddingDistance[k]; for (int i = 0; i < neighbours.Length; i++) { if (word != neighbours[i].GetWord()) { double distance = Distance(neighbours[i]); double[] pcadistance = new double[3]; for (int j = 0; j < 3; j++) { pcadistance[j] = pca[j] - neighbours[i].GetPCAVectors()[j]; } WordEmbeddingDistance wed = new WordEmbeddingDistance(neighbours[i], distance, pcadistance); for (int j = 0; j < k; j++) { if (nearestNeighbours[j] == null) { nearestNeighbours[j] = wed; j = k; } else if (nearestNeighbours[j].GetDistance() > wed.GetDistance()) { WordEmbeddingDistance holder = nearestNeighbours[j]; nearestNeighbours[j] = wed; wed = holder; } } } } }
private void CreateGameObjects() { // Setup Initial state based on sample word preview = false; // Create game options options = new GameObject[k + 1]; //No longer display initial option MeshRenderer meshRenderer = GetComponent <MeshRenderer>(); meshRenderer.enabled = false; meshRenderer = text.GetComponent <MeshRenderer>(); meshRenderer.enabled = false; BoxCollider boxCollider = GetComponent <BoxCollider>(); boxCollider.enabled = false; WordEmbeddingDistance[] NN = Target.GetNN(); // Create target option GameObject targetOption = Instantiate(optionPrefab); Option to = targetOption.GetComponent <Option>(); to.cam = cam; to.SetParent(this); to.SetWordEmbedding(Target); to.transform.localScale = new Vector3(scale, scale, scale); targetOption.transform.position = transform.position; options[0] = targetOption; // Create k Nearest Neighbour Objects for (int i = 0; i < k; i++) { WordEmbeddingDistance neighbour = NN[i]; GameObject option = Instantiate(optionPrefab); Option o = option.GetComponent <Option>(); o.cam = cam; o.SetParent(this); o.SetWordEmbedding(neighbour.getWordEmbedding()); o.transform.localScale = new Vector3(scale, scale, scale); option.transform.position = transform.position + new Vector3( (float)(zoom * (Math.Cos(angle) * neighbour.getPCADistance()[0] - Math.Sin(angle) * neighbour.getPCADistance()[2])), (float)(zoom * neighbour.getPCADistance()[1]), (float)(zoom * (Math.Sin(angle) * neighbour.getPCADistance()[0] + Math.Cos(angle) * neighbour.getPCADistance()[2]))); options[i + 1] = option; } }