Пример #1
0
    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);
        }
Пример #3
0
        // 지지 점들 구하기
        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;
            }
        }
Пример #4
0
    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);
    }
Пример #5
0
        // 랜덤으로 점 두개 뽑기
        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;
            }
        }
Пример #6
0
        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);
                }
            }
        }
Пример #7
0
 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++;
         }
     }
 }
Пример #8
0
        // 기울기 구하기
        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;
            }
        }
Пример #9
0
            // 함수들..

            // 생성자
            public RANSAC_Model()
            {
                SelectedPoints  = new TwoPoints();
                ConsensusPoints = new List <Point>();
            }