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

В компьютерной графике часто используют геометрические знания. Некоторые построения рисунков требуют расчета точек. В частности, иногда требуется решить приблизительно такую задачу:
 Даны точка А и Окружность О с радиусом R. Найти точки касания касательной к окружности О, проведенной через точку А.
 (Задача может иметь разную формулировку, надеюсь условие её понятно)

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

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

 Изначально я решил разбить на отдельные функции разные участки кода, чтоб не сливать всё в одну кучу. При этом в качестве принимаемых параметров указал ссылки на переменные. Помню как меня сначала раздражало, что во многих примерах используют эти ссылки, не понимая зачем это нужно, но так как глобальные переменные желательно избегать, а возвращать более одного значения не слишком удобно (Из одной точки — Две касательные. = 2 точки соприкосновения. Для каждой точки по 2 значения. Итого 4 значения), то удобно использовать эти самые ссылки. Еще сразу предупрежу, что я обозначил центр окружности О1 и O2, что в коде можно спутать с нулем, но такое обозначения помогает легче ориентироваться при написании разных формул (сразу понятно — окружность)

 Ладно, итак много букв написал, поэтому некоторые недостатки компенсирую позже, а сейчас переходим к коду:

 Код С++ Координаты точек пересечения касательной и окружности

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

 Еще хотелось бы в очередной раз быть повнимательнее. Я, например, при переписывании этого кода, перепутал участок, считающий большие X и Y. Они считаются по одной окружности, а я написал по разным и потом долго искал где не так.

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

 Если кому-то интересно, то могу порекомендовать практическую задачу по построению касательной к окружности, используя этот материал и этот

Чувствую себя немного виноватым и что я многого не договорил, но знаю, что большинство не говорит даже о том, что я тут донес, поэтому надеюсь на то что всё, что я не написал вам не составит труда доделать

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

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

Ваш e-mail не будет опубликован.

Поиск

 
     

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

Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Встречает в аду один черт другого и говорит: "Слушай, это ты того компьютерщика сюда притащил?" - "Да, а что?" - "Ты в другой раз толком объясняй, что такое ад - а то он, пока понял, что это не Doom, двести чертей перестрелял..."

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок