IEnumerator SpawnPlane() { Repeat: TwoPoints tp = GetPoints(); if (Vector3.Distance(tp.point1.transform.position, tp.point2.transform.position) < 400) { goto Repeat; } GameObject plane = Instantiate(planePrefab, tp.point1.transform.position, Quaternion.identity); planes.Add(plane); plane.GetComponent <planeFly>().Setup(tp.point2.transform); if (cc.plane == null) { cc.plane = plane; } yield return(new WaitForSeconds(10)); if (playersList.joinedPlayers.Count == 0) { AllSpawned = true; } else { NewPlane(); } }
public double CalculateDistance([FromBody] TwoPoints data) { var deltaX = data.Point1.X - data.Point2.X; var deltaY = data.Point1.Y - data.Point2.Y; var distance = Math.Sqrt(deltaX * deltaX + deltaY * deltaY); return(distance); }
// 지지 점들 구하기 public void CalcConsensusPoints(RANSAC_Model Model, Double ConsensusThreshold) { try { Model.ConsensusPoints.Clear(); TwoPoints TwoPoints = Model.SelectedPoints; Double distance = 0; Point ptOne = TwoPoints.pt1; Point ptTwo = TwoPoints.pt2; for (int i = 0; i < this.InputPoints.Count; i++) { Double x1 = this.InputPoints[i].X; Double y1 = this.InputPoints[i].Y; // 거리 구하기 if (ptTwo.X == ptOne.X) {//x가 같으면 distance = Math.Abs(x1 - ptOne.X); } else if (ptTwo.Y == ptOne.Y) {//y가 같으면 distance = Math.Abs(y1 - ptOne.Y); } else { // 점(ptOne.X,ptOne.Y)를 지나는 직선의 방정식 : mx-y-m*ptOne.X+ptOne.Y = 0 // =====점(x1,y1)과 직선(ax+by+c=0)의 거리 구하는 공식==== // |ax1+by1+c| // ------------ // 루트(a제곱+b제곱) Double Slope = CalcSlope(TwoPoints); distance = Math.Abs(x1 * Slope + (-y1) + (-Slope * ptOne.X + ptOne.Y)) / (Math.Sqrt(Math.Pow(Slope, 2) + 1)); } if (distance < ConsensusThreshold) { Model.ConsensusPoints.Add(this.InputPoints[i]); } } } catch (Exception) { throw; } }
TwoPoints GetPoints() { TwoPoints t = new TwoPoints(); Redo: t.point1 = planeStart[Random.Range(0, planeStart.Count)]; t.point2 = planeStart[Random.Range(0, planeStart.Count)]; if (t.point1.transform.position.x == t.point2.transform.position.x || t.point1.transform.position.z == t.point2.transform.position.z) { goto Redo; } return(t); }
// 랜덤으로 점 두개 뽑기 TwoPoints SelectTwoPoint(List <Point> InputPoints) { try { // 점이 한개 이하이면 안되 if (InputPoints.Count <= 1) { throw new Exception("점이 한개 이하면 안되"); } // 결과 점 두개 TwoPoints Result = new TwoPoints(); // 변수들 초기화 int Start, End, Size, Rand_num1, Rand_num2; Size = InputPoints.Count; Start = 0; End = Size - 1; // 겹치지 않는 난수 구해 //Random Rand = new Random(); while (true) { Rand_num1 = m_Rand.Next(Start, End); Rand_num2 = m_Rand.Next(Start, End); if (Rand_num1 != Rand_num2) { break; } } // 난수를 인덱스로 사용해서 pt1, pt2 구해 Result.pt1 = InputPoints[Rand_num1]; Result.pt2 = InputPoints[Rand_num2]; // 결과 리턴 return(Result); } catch (Exception) { throw; } }
private void paintPictureBox_Paint(object sender, PaintEventArgs e) { if (screenWorking) { if (lineChoice) { TwoPoints two = new TwoPoints(new Point(mouse_paint_x, mouse_paint_y), new Point(mouse_delta_x, mouse_delta_y), penPaint.Color); e.Graphics.DrawLine(penPaint, two.First, two.Second); } foreach (TwoPoints point in listPoints) { if (point.Seen) { e.Graphics.DrawLine(new Pen(point.Color, penPaint.Width), point.First, point.Second); } } foreach (Pixel point in listPointsPixel) { if (point.Seen) { e.Graphics.DrawEllipse(new Pen(point.Color, penPaint.Width), point.Point.X, point.Point.Y, 2, 2); } } if (curveRandom.Length > 0) { e.Graphics.DrawCurve(penPaint, curveRandom); } if (curveBezier.Length > 0) { e.Graphics.DrawBeziers(penPaint, curveBezier); } } else { if (paintPictureBox.BackColor == Color.White && loadingScreen == true) { e.Graphics.DrawString("Loading...", new Font("Arial", 14, FontStyle.Bold), Brushes.Aqua, paintPictureBox.Width / 3, paintPictureBox.Height / 3); e.Graphics.TranslateTransform(paintPictureBox.Width / 2, paintPictureBox.Height / 2); e.Graphics.RotateTransform(angle); e.Graphics.DrawEllipse(new Pen(Color.Red, 50), 15, 15, 30, 30); } } }
private void paintPictureBox_MouseUp(object sender, MouseEventArgs e) { if (screenWorking && !loadingScreen) { clickedPaint = false; if (lineChoice == true) { TwoPoints two = new TwoPoints(new Point(mouse_paint_x, mouse_paint_y), new Point(mouse_delta_x, mouse_delta_y), penPaint.Color); listPoints.Add(two); history.Add(types.line); } else if (pixelChoice) { listPointsPixel.Add(new Pixel(new Point(e.X, e.Y), penPaint.Color)); history.Add(types.pixel); deep++; } } }
// 기울기 구하기 public Double CalcSlope(TwoPoints TwoPoints) { try { Double Slope; Point ptOne = TwoPoints.pt1; Point ptTwo = TwoPoints.pt2; if (ptTwo.X - ptOne.X == 0) { Slope = 0; } else { Slope = (ptTwo.Y - ptOne.Y) / (ptTwo.X - ptOne.X); } return(Slope); } catch (Exception) { throw; } }
// 함수들.. // 생성자 public RANSAC_Model() { SelectedPoints = new TwoPoints(); ConsensusPoints = new List <Point>(); }