Tusshar Samrit Ответов: 1

Как рассчитать диаметр или радиус окружности


if (_shapeChecker.IsCircle(_edgePoint, out _center, out _radius))
            {


                Rectangle[] _rects = _blobCounter.GetObjectsRectangles();

                string _shapeString = "" + _shapeChecker.CheckShapeType(_edgePoint);
                Pen _pen = new Pen(Color.Red, ipenWidth);
                int _x = (int)_center.X;
                int _y = (int)_center.Y;
                _g.DrawString(_shapeString, _font, _brush, _x, _y);
                _g.DrawEllipse(_pen, (float)(_center.X - _radius),
                                     (float)(_center.Y - _radius),
                                     (float)(_radius * 2),
                                     (float)(_radius * 2));

                //size of rectange
                foreach (Rectangle rc in _rects)
                {
                    ///for debug
                    //System.Diagnostics.Debug.WriteLine(
                    //    string.Format("Circle size: ({0}, {1})", rc.Width, rc.Height));

                    iFeatureWidth = rc.Width;
                    double dis = FindDistance(iFeatureWidth);
                    //textBox1.Text = dis.ToString("N2");
                    _g.DrawString(dis.ToString("N2"), _font, _brush, _x, _y + 60);

                    //  textBox1.Text= dis.ToString("N2"), _font, _brush, _x, _y + 60);


                    // get bounding rectangle of the points list
                    IntPoint minXY, maxXY;
                    PointsCloud.GetBoundingRectangle(_edgePoint, out minXY, out maxXY);
                    // get cloud's size
                    IntPoint cloudSize = maxXY - minXY;
                    // calculate center point
                    DoublePoint center = minXY + (DoublePoint)cloudSize / 2;
                    // calculate radius

                        float radius = ((float)cloudSize.X + cloudSize.Y) / 4;
                        textBox2.Text = Convert.ToString(radius);
                        textBox3.Text = dis.ToString();


                }
            }


Что я уже пробовал:

float radius = ((float)cloudSize.X + cloudSize.Y) / 4;
                         textBox2.Text = Convert.ToString(radius);
                         textBox3.Text = dis.ToString();

Richard MacCutchan

В чем же вопрос?

Tusshar Samrit

я получаю неверное значение или радиус

Richard MacCutchan

Что это значит?

OriginalGriff

Помните, что мы понятия не имеем, какие данные вы вводите, или что вы ожидаете получить - поэтому приведите нам примеры, покажите нам, что вы вводите, какие результаты вы ожидаете, и какие значения вы получаете. И мы понятия не имеем, что такое ваш _shapeChecker.Метод IsCircle делает это - за исключением того, что он, по-видимому, вычисляет центр и радиус, поэтому он может иметь отношение к вашей проблеме "неправильное значение или радиус".

Tusshar Samrit

https://drive.google.com/open?id=1LhfQZRa6J4b9cbtkiMjisAx-fd-5Tyh-

Patrice T

Определите неверный результат.
Покажите пример входных данных, а также фактический и ожидаемый результат.

Tusshar Samrit

это новый проект обнаружения объектов только я пытаюсь вычислить радиус окружности который я не имею ни малейшего представления как это сделать пожалуйста помогите мне сэр

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Tusshar Samrit

https://drive.google.com/open?id=1LhfQZRa6J4b9cbtkiMjisAx-fd-5Tyh-
ссылка на мой проект

1 Ответов

Рейтинг:
2

den2k88

Вы ставите вопрос таким образом, что это все догадки. Оказывается, мне скучно, поэтому я попробую угадать.

Вы нашли ограничивающий прямоугольник чего-то, что вы предполагаете или знаете наверняка, является кругом. Тогда вы сказали: радиус окружности равен половине одной из сторон. Что вполне логично.

Почему вы суммировали X и Y, а затем разделили на 4? Это вообще не имеет смысла, так как будет работать только в том случае, если прямоугольник фактически является квадратом (X = Y), но в этом случае просто выберите один и разделите на 2, Зачем беспокоиться о сумме?

Основная логическая проблема здесь заключается в том, что у вас есть ограничивающий прямоугольник, а не квадрат. Вы должны взять самую короткую из его сторон и разделить пополам, так что

float radius = ((float)min(cloudSize.X, cloudSize.Y)) / 2;


(Я мало знаю о фреймворке C#, поэтому использовал min поскольку это был C++, используйте минимальную функцию, которую вы предпочитаете).