Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
1

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

24.05.2015, 05:11. Просмотров 593. Ответов 12
Метки нет (Все метки)

Как вычесть координаты двух точек,если они преобразованы в string.Перевести в Int32 не получается.Пишет проверь формат. Рисую эллипс,вывожу координаты в текстбокс.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
bool drawCircle = false;
private bool button1WasClicked = false;
 
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {          
 
            if (drawCircle)
            {
                SolidBrush sb = new SolidBrush(btn_PenColor.BackColor);
                g.FillEllipse(sb, e.X, e.Y, int.Parse(txt_ShapeSize.Text), int.Parse(txt_ShapeSize.Text));
              
                drawCircle = false;
 
                if (button1WasClicked)
                {
                    textBox1.Text = e.Location.ToString();
                    button1WasClicked = false;
                }
             }
         }
 private void button1_Click(object sender, EventArgs e)
        {
            button1WasClicked = true;
            drawCircle = true;
        }

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


C#
1
2
3
4
5
6
7
 private void button2_Click(object sender, EventArgs e)
        {
 
dist = Math.Sqrt(Math.Pow(this.x - P.x, 2) + Math.Pow(this.y - P.y, 2));
 
}
 textBox2.Text = dist.ToString() \\ и так далее
Не получается
0
Миниатюры
Вычислить расстояние между точками  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2015, 05:11
Ответы с готовыми решениями:

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

MS Chart: какое свойство отвечает за расстояние между точками на диаграмме
Добрый день! Использую MS Chart, не могу никак найти свойство, которое...

Поиск кратчайшего пути между двумя точками
Написал программу, которая должна искать кратчайший путь между 2мя точками. В...

Яндекс карты. Расстояние между двумя точками
Всем привет, подскажите пожалуйста каким образом обратиться к yandex map api,...

Расстояние между прямоугольниками
Задача: произвольно рисуется 2 прямоугольника на координатной плоскости X Y. ...

12
kolorotur
Эксперт .NET
10494 / 8681 / 2160
Регистрация: 17.09.2011
Сообщений: 14,901
Завершенные тесты: 1
24.05.2015, 18:51 2
Цитата Сообщение от Злой_дед Посмотреть сообщение
Пишет проверь формат
Цепляйте dist к свойству .Tag соответствующего текстбокса, а при вычислении доставайте ее через каст:
C#
1
Point dist = (Point)textBox2.Tag
Тогда не придется гонять координату из текста и обратно.
1
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
24.05.2015, 19:13  [ТС] 3
через каст это как?

Добавлено через 1 минуту
ссылку на проект в личку скинул,мне непонятно как координаты доставать

Добавлено через 5 минут
там вычислить расстояние от точки R1 до R2 нужно при нажатии на кнопку и выводить на текстбокс что под этой кнопкой расположен
0
kolorotur
Эксперт .NET
10494 / 8681 / 2160
Регистрация: 17.09.2011
Сообщений: 14,901
Завершенные тесты: 1
24.05.2015, 19:24 4
Цитата Сообщение от Злой_дед Посмотреть сообщение
через каст это как?
Как в примере

C#
1
2
3
4
5
6
if (button10WasClicked)
{
    textBox1.Text = e.Location.ToString();
    textBox1.Tag  = e.Location;
    button10WasClicked = false;
}
И так далее для остальных кнопок.
Потом в кнопке вычисления расстояния делайте что-то в этом роде:
C#
1
2
3
4
5
6
7
8
9
private void button11_Click(object sender, EventArgs e)
{
    var r1 = (Point)textBox6.Tag;
    var r2 = (Point)textBox2.Tag;
 
    var distance = Math.Sqrt(r1.X * r1.X + r2.Y * r2.Y);
 
    textBox9.Text = distance.ToString();
}
И ёлы-палы, давайте контролам нормальные имена, а то ведь черт ногу сломит что там для чего используется.
1
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
24.05.2015, 19:39  [ТС] 5

просто в процессе когда стока всего меняется не успеваешь переделывать все))),
а теперь вот когда мы посчитаем расстояние между R1 и R2,как его поделить на заданный юзером количество линий сетки по горизонтали,кароче говоря на те самые квадратики которые они образуют?расстояние от одной до следующей линии принять равным 0,1 секунды если

Добавлено через 9 минут
Цитата Сообщение от kolorotur Посмотреть сообщение
var distance = Math.Sqrt(r1.X * r1.X + r2.Y * r2.Y);
это точная формула?
0
kolorotur
Эксперт .NET
10494 / 8681 / 2160
Регистрация: 17.09.2011
Сообщений: 14,901
Завершенные тесты: 1
24.05.2015, 19:46 6
Цитата Сообщение от Злой_дед Посмотреть сообщение
как его поделить на заданный юзером количество линий сетки по горизонтали,кароче говоря на те самые квадратики которые они образуют?
Так вы же сами ответили
Поделите расстояние в пикселях на размер квадратика в пикселях — получите расстояние в квадратиках.
Умножьте расстояние в квадратиках на количество единиц на квадратик — получите расстояние в единицах.

Добавлено через 1 минуту
Цитата Сообщение от Злой_дед Посмотреть сообщение
это точная формула?
Ой, конечно нет!
Это я когда код долбил, о чем-то другом думал.

C#
1
Math.Sqrt(Math.Pow(r2.X - r1.X, 2) + Math.Pow(r2.Y - r1.Y, 2));
1
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
24.05.2015, 19:54  [ТС] 7
Цитата Сообщение от kolorotur Посмотреть сообщение
Поделите расстояние в пикселях на размер квадратика в пикселях — получите расстояние в квадратиках.
Умножьте расстояние в квадратиках на количество единиц на квадратик — получите расстояние в единицах.
Это ясно,поможете с кодом? Дело в том что там линии по горизонтали и вертикали,которые создают квадратики,может на количество линий делить?Хотя нет,не получится. Линии по вертикали получается только нужны

Добавлено через 1 минуту
Размер квадратика в пикселях тяжеловасто мне прописать,уровень слишком не для меня
0
kolorotur
Эксперт .NET
10494 / 8681 / 2160
Регистрация: 17.09.2011
Сообщений: 14,901
Завершенные тесты: 1
24.05.2015, 20:06 8
Цитата Сообщение от Злой_дед Посмотреть сообщение
Это ясно,поможете с кодом?

Оператор деления — /
Оператор умножения — *

Цитата Сообщение от Злой_дед Посмотреть сообщение
там линии по горизонтали и вертикали,которые создают квадратики,может на количество линий делить?
Цитата Сообщение от Злой_дед Посмотреть сообщение
Размер квадратика в пикселях тяжеловасто мне прописать

Вы же уже это делаете, когда рисуете эти самые линии.
У вас там даже конфигу***** есть для количества клеток.
Если вы как-то отрисовываете точное количество этих клеток на поле, то наверное вы как-то высчитываете для этого размер клетки, правда?

Вот тем же макаром его высчитывайте и для определения расстояния

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
конфигу*****
хех.
Я, конечно, тоже не люблю, когда мою Родину кто-то называет таким словом, но тут получилось прикольно

конфигур.а.ш.к.а
0
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
24.05.2015, 20:25  [ТС] 9
Цитата Сообщение от kolorotur Посмотреть сообщение
Если вы как-то отрисовываете точное количество этих клеток на поле, то наверное вы как-то высчитываете для этого размер клетки, правда?
Да,я просто неправильно выразился. Вот тут я прописываю квадратики

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void DrawGrid(Graphics graphics, Rectangle Bounds, int p1, int p2)
        {
            if (p1 > 1)
            {
                int w = (int)(Bounds.Width / p1);//Ширина одной ячейки
                int x = Bounds.Left;
                while (x < Bounds.Right)
                {
                    graphics.DrawLine(Pens.Green, x, Bounds.Top, x, Bounds.Bottom);
                    x += w;
                }
            }
            if (p2 > 1)
            {
                int h = (int)(Bounds.Height / p2);//Высота одной ячейки
                int y = Bounds.Top;
                while (y < Bounds.Bottom)
                {
                    graphics.DrawLine(Pens.Green, Bounds.Left, y, Bounds.Right, y);
                    y += h;
                }
            }
        }
p1 нам нужно получается.Мне переменную "w" делить на то,что в textBox9.Text = distance.ToString(); получилось? или p1? ширина же "w"
0
kolorotur
Эксперт .NET
10494 / 8681 / 2160
Регистрация: 17.09.2011
Сообщений: 14,901
Завершенные тесты: 1
24.05.2015, 21:43 10
Цитата Сообщение от Злой_дед Посмотреть сообщение
Мне переменную "w" делить на то,что в textBox9.Text = distance.ToString(); получилось? или p1? ширина же "w"
Почему вы меня спрашиваете?

Расстояние от кончика хвоста до кончика носа удава = 500 сантиметров.
Один попугай — 30 сантиметров. Какова длина удава в попугаях?

Расстояние от точки 1 до точки 2 = 500 пикселей.
Ширина одной клетки = 30 пикселей. Каково расстояние между точками в клетках?
1
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
25.05.2015, 01:56  [ТС] 11
объявил глобальную private int w;

C#
1
2
3
4
5
6
7
8
9
10
11
12
 private void button11_Click(object sender, EventArgs e)
        {
            var r1 = (Point)textBox6.Tag;
            var r2 = (Point)textBox2.Tag;
 
            var distance = Math.Sqrt(Math.Pow(r2.X - r1.X, 2) + Math.Pow(r2.Y - r1.Y, 2));                       
 
            var size = distance/w*0.1;
 
            textBox9.Text = size.ToString();
 
        }
выводит "бесконечность"
0
kolorotur
Эксперт .NET
10494 / 8681 / 2160
Регистрация: 17.09.2011
Сообщений: 14,901
Завершенные тесты: 1
25.05.2015, 14:23 12
Цитата Сообщение от Злой_дед Посмотреть сообщение
объявил глобальную private int w;
Так ей же нигде значение не присваивается, поэтому она всегда =0.

w — это отношение ширины панели, на которой происходит рисование (pictureBox1), к ширине клетки, указанной в настройках (nudHor).

Я вот тут подумал, а зачем вам высчитывать расстояние между точками на двумерной плоскости?
Если приложение используется для обработки сигналов и вам нужно найти разницу по времени между пиками, то здесь будет достаточно простой разницы по оси Х (время), зачем примешивать сюда амплитуду?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void button11_Click(object sender, EventArgs e)
{
    var r1 = (Point)textBox6.Tag;
    var r2 = (Point)textBox2.Tag;
 
    int distanceInPixels    = Math.Abs(r2.X - r1.X);
    int cellWidthInPixels   = pictureBox1.Width / (int)nudHor.Value;
    var timeUnitsPerCell    = 0.1;
 
    var timeUnitsPerPixel   = timeUnitsPerCell / cellWidthInPixels;
    var distanceInTimeUnits = distanceInPixels * timeUnitsPerPixel;
 
    textBox9.Text = distanceInTimeUnits.ToString();
}
1
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
26.05.2015, 01:47  [ТС] 13
гранд мерси,то что нужно! амплитуда понадобится,но для других преобразований. Пришлите мне почтовый адрес или номер карты,я вам презент отправлю!
0
26.05.2015, 01:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2015, 01:47

Гистограмма - уменьшить расстояние между столбцами
Здравствуйте, подскажите как в chart при построении гистограммы (ChartType =...

Увеличить расстояние между элементами CheckedListBox
Собственно, какие свойства в VS отвечают за формат данных в коллекции...

При рисовании кистью ощущается задержка и вместо цельной линии образуются пробелы между точками
Доброго времени суток. Делаю простенький графический редактор. Столкнулся с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru