C++ для начинающих как Узнать расстояние отрезка

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

  Чтобы наиболее наглядно показать как стоит проводить вычисления я буду вводить координаты начала и конца отрезка с клавиатуры.

Код C++ Рисование отрезка

  Собственно, это программа построения отрезка по координатам начала и конца. Бывает, что дальнейшее написание программы требует узнать длину выбранного отрезка для следующих вычислений и дальнейшего построения. Вот тут к нам на помощь приходят знания, данные нам Пифагором

  Напомню теорему. Сумма квадратов катетов равна квадрату гипотенузы. (a²+b²=c²)

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

Итак.   Чтобы можно было провести выбранный расчет — нам нужен прямоугольный треугольник. Чтобы знать хоть какие-то размеры, нам нужны отрезки параллельные осям.Честно говоря — с одной стороны то что я сейчас напишу лишний шаг, но с другой стороны он может быть кому-то полезен. Ниже будет более нужное относительно этой статьи.

  Для начала из выбранной нами точки проведем линию на ось y, после чего проведем на ось y
Код C++ Построение катетов

  Изменения совсем незначительны, но этот момент лично мне пока еще доставляет некоторые неудобства. Хорошо если вы умеете представлять декартову плоскость и ориентируетесь в ней как рыба в воде, но для таких как я — само построение катетов в нужном месте сразу не получается. В принципе важно не место где они будут находится, важен только их размер, но некоторый практический навык можно получить занимаясь изучением такого простенького построения.

  Теперь сконцентрируемся на самом нужном. На самом деле, узнать размеры этих катетов очень просто. Как я писал, они являются параллелями осей.

Общая формула для получения их длин
katet1=abs(x1-x2) //Длина горизонтального
katet2=abs(y1-y2) //Длина вертикального

следовательно длина изначально построенного отрезка равна длине гипотенузе показанного ранее треугольника.
gipotenuza=sqrt(katet1²+katet2²)

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

Код С++ Узнать размер отрезка

  Видно, что есть момент с комментарием: пояснение ниже. Поясняю. Чтобы как-то можно было измерить и убедится в верности расчета, хотелось бы измерять по линейке. На экране минимальная единица измерения это пиксель. Пиксель это одна точка, но в то же время это квадрат, который имеет свою длину. При этом в зависимости от экранов длина пикселя может быть различна. Но чтобы перевести размеры в нашу систему и получить их в миллиметрах, нужно знать эту самую длину пикселя.
  Часто бывает так в программировании, что что-то требуется подгонять. Вот я и решил, что стоит провести небольшой расчет. Измерил линейкой длину досовского окошка, разделил getmaxx() на этот размер, получил некоторое число. Точнее говоря у меня вышло 5.
Длина моего дос окна = 122мм
getmaxx()/122=5;

  Короче говоря — это арифметика из 5 класса средней школы для получения единицы измерения. Измеряя по линейке результаты расчетов длин, у меня вышло приблизительно, но неточно и я методом подбора пришел к числу 5.2

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

  Еще хотелось бы обратить внимание на типы переменных. Изначально я задал катеты как int, но вычисления так происходили неверно. Это тот случай когда я получил капельку лишнего опыта, увидев свое срабатывание. Когда я ищу ошибки в своих программах — то чаще просто вывожу переменные на экран, например с помощью cout, изначально так привык. Так вот попытка написать сout<<katet1*katet1<<«+»<<katet2*katet2<<«=»<<katet1*katet1+katet2*katet2
выводила мне не те данные, что я ожидал при своих значениях. Вроде я умножаю два числа и не присваиваю их никуда, то думать о переполнении как-то лень. Но на самом деле изначально задав целочисленный тип int этим катетам и в результате умножения, результат записывается тоже в int., даже если нет планов запоминать результат в отдельную переменную. Кто-то скажет — это же элементарно, но признаюсь честно: «До сих пор я этого не знал», поэтому получил переполнение и неожиданные для себя результаты.

  Будьте внимательнее меня.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/bill-fillips-7879021/android-programmirovanie-dlya-professionalov-18307594/?lfrom=15589587
Яндекс.Метрика