MarkerIndex[] IEnvironment.matchByPosition(Vector3[] rays, Vector3 origin) { float sqrTolerance = 0.02f; var res = Enumerable.Repeat(MarkerIndex.Unknown, rays.Length).ToArray(); Vector2 shift = new Vector2(origin.x, origin.z); var projections = projectRaysOnFloor(rays, origin.y).Select(p => p + shift).ToList(); for (int idMarker = 0; idMarker < 3; ++idMarker) { for (int idProjection = 0; idProjection < rays.Length; ++idProjection) { int numMatches = 0; if ((_markers[idMarker] - projections[idProjection]).sqrMagnitude < sqrTolerance) { res[idProjection].value = (uint)idMarker; ++numMatches; } if (numMatches > 1) { res[idProjection] = MarkerIndex.Invalid; } } } lock (_visobject) { _machPos = new MatchByPositionVisualization(rays.ToList(), origin, res); } return(res); }
public MatchByPositionVisualization(MatchByPositionVisualization other) { rays = other.rays.ToList(); origin = other.origin; markersIndices = other.markersIndices.ToList(); }
void Update() { MatchByPositionVisualization positionsonfloor = _dyamicuser.getMatchByPositionVisualization(); if (positionsonfloor != null) { transform.position = new Vector3(positionsonfloor.origin.x, positionsonfloor.origin.y, positionsonfloor.origin.z); } if (axes == RotationAxes.MouseXAndY) { rotationX += Input.GetAxis("Mouse X") * sensitivityX; rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationX = ClampAngle(rotationX, minimumX, maximumX); rotationY = ClampAngle(rotationY, minimumY, maximumY); Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up); Quaternion yQuaternion = Quaternion.AngleAxis(rotationY, -Vector3.right); transform.localRotation = originalRotation * xQuaternion * yQuaternion * _offset; } else if (axes == RotationAxes.MouseX) { rotationX += Input.GetAxis("Mouse X") * sensitivityX; rotationX = ClampAngle(rotationX, minimumX, maximumX); Quaternion xQuaternion = Quaternion.AngleAxis(rotationX, Vector3.up); transform.localRotation = originalRotation * xQuaternion; } else { rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationY = ClampAngle(rotationY, minimumY, maximumY); Quaternion yQuaternion = Quaternion.AngleAxis(-rotationY, Vector3.right); transform.localRotation = originalRotation * yQuaternion * _offset; } transform.TransformDirection(transform.localRotation.eulerAngles); if (Input.GetKey(KeyCode.LeftArrow)) { // transform.position += Vector3.left * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.RightArrow)) { // transform.position += Vector3.right * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(0, 0, speed * Time.deltaTime, Space.Self); } if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(0, 0, -speed * Time.deltaTime, Space.Self); } transform.position = new Vector3(transform.position.x, height, transform.position.z); if (_currentTest != null && _lastPosition != null) { float distance = Vector3.Distance(_lastPosition, transform.position); if (distance > 0) { float change = (distance / _currentTest.Distance) * _currentTest.MaxAngle; ApplyManipulation(change); } } _lastPosition = transform.position; }