Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735

Выбрать касательную к окружности

16.07.2019, 00:46. Показов 5420. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!
Прошу вашей помощи для решения довольно несложной (казалось бы) задачи:
пусть задан некоторый начальный вектор, определяемый точкой начала и конца (x_нач;y_нач) = (X2-X1;Y2-Y1); аналитически находится центр окружности заданного радиуса R, касательной к вектору в точке его начала:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases} & \text{Ap_1*(X1-x_c)+Bp_1*(Y1-y_c)=0}\\  & \text{(X1-x_c)^2+(Y1-y_c)^2=R^2}  \end{cases}
, где 1-е уравнение говорит о том, что центр окружности (x_c;y_c) лежит на перпендикуляре (Ap1,Bp1) к прямой, сонаправленной с заданным вектором, проходящем через начало вектора (X1;Y1), а 2-е - что геометрическое место точек окружности радиуса R проходит через ту же точку начала вектора.
Решив систему, получим 2 пары координат центра удовлетворяющей системе окружности; условимся, что рассматриваем ту, x_c которой наибольшая.
Заданы также 2 точки вне полученной окружности - (x_1;y_1) и (x_2;y_2) - от которых строятся касательные к ней, также аналитически:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{cases} & \text{(x_c-x_1kas_1)^2+(y_c-y_1kas_1)^2=R^2}\\  & \text{(x_1kas_1-x_c)*(x_1-x_c)+(y_1kas_1-y_c)*(y_1-y_c)=R^2}  \end{cases}
, где 1-е уравнение говорит о прохождении геометрического места той же окружности через точку касания, а 2-е описывает прямую, касающуюся окружности в некоторой точке (x_1_kas1;y_1_kas1) и проходящую через точку (x_1;y_1); ответом должны являться две пары координат - (x_1_kas1;y_1_kas1) и (x_1_kas2;y_1_kas2) - но здесь что-то "нечисто", поскольку помимо двух действительных решений компьютер выдаёт третье - комплексное (почему - непонятно, но, я думаю, из-за доли тавтологии в этих двух уравнениях, и, как следствие, некоторой недоопределённости в системе).
Со второй точкой проделывается то же самое.
В результате появляются 4 точки касания, из которых окружность переходит в прямую и достигает соответствующей точки.
Теперь о сути задачи, решить которую я всё ещё не могу - при рассмотрении каждой конкретной точки необходимо из двух касательных выбрать только ту, которая может служить продолжением движения по окружности, которое задано начальным вектором. Иными словами - допустим, есть автомобиль, который в некоторый момент времени (в точке (X1;Y1)) начал поворот по окружности радиусом R по часовой стрелке (как дать понять компьютеру, что вектор означает направление поворота я также не знаю) с целью достичь точки 1; тогда в некоторой точке (x_1_kas1;y_1_kas1) автомобиль должен выйти из поворота и продолжить движение по прямой до достижения точки 1; но одновременно с этим существует вторая точка касания (x_1_kas2;y_1_kas2) и вторая касательная ей соответствующая, в которую автомобиль НЕ МОЖЕТ "вписаться" двигаясь по окружности по направлению начального вектора (нарушена гладкость физики процесса).
Таким образом, основная задача - отыскать все "недопустимые" точки касания (красные прямые на рисунке), т.е. те, в которых нарушается общая физика безостановочного движения.
Я буду оооооочень благодарен за помощь!!!
P.S. Рисунок геометрии прилагается
Миниатюры
Выбрать касательную к окружности  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2019, 00:46
Ответы с готовыми решениями:

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

Нарисовать касательную к окружности.
Ребята, очень нужна помощь, я начинающий пользователь Delphi. И не могу разобраться с графикой. Проблема состоит в том что по условию мне...

Провести касательную к окружности и прямую параллельно касательной
Через заданную точку на окружности провести касательную. PointRectLine. Point, Line, Circle Через заданную точку на окружности...

29
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
16.07.2019, 07:26
Посмотрите внимательно на второе уравнение во второй системе
1
Эксперт по математике/физике
11074 / 7375 / 3990
Регистрация: 14.01.2014
Сообщений: 16,811
16.07.2019, 09:14
"Красные" направления можно отсечь с помощью векторного произведения векторов: радиального и касательного, направленных из точки касания в центр и целевую точку, соответственно. Для "зеленого" направления будет положительный знак, для "красного" - отрицательный. А со вторым уравнением второй системы у Вас непорядок!
1
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
16.07.2019, 19:56

Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
из двух касательных выбрать только ту, которая может служить продолжением движения по окружности, которое задано начальным вектором.
1) Как решить какой отрезок больше всего совпадает с направлением зеленой стрелки?
Угол между векторами:
Угол между DE и AC
Угол между DE и AF
Где меньший угол там и больше совпадение направления, люди также решают…нет?

Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
как дать понять компьютеру, что вектор означает направление поворота я также не знаю
Повернуть точку можно например матрицей поворота в 2д.
Там две формулы по часовой и против.
“Матрица поворота в двумерном пространстве”
https://ru.wikipedia.org/wiki/Матрица_поворота
В правильную сторону крутим или нет можно снова проверять по углу между вектором нужного направления и вектором построенным от двух попыток поворота по и против часовой на малый угол и сверять направление какое правильней.

Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
необходимо из двух касательных выбрать
2)Как решить какая касательная правильная синяя или фиолетовая?
Самое простое это расстояние до точки касательной. Или снова по углу между векторами
“по углу между вектором нужного направления и вектором построенным от двух попыток поворота по и против часовой на малый угол и сверять направление какое правильней.”
0
Эксперт по математике/физике
11074 / 7375 / 3990
Регистрация: 14.01.2014
Сообщений: 16,811
16.07.2019, 20:59
Похоже, что Вы вообще не поняли задачу, иначе не стали бы рисовать "вектор" движения DE в стороне от окружности. ТС задавал вектор с началом на окружности по касательной, так как автомобиль движется по окружности.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
1) Как решить какой отрезок больше всего совпадает с направлением зеленой стрелки?
Угол между векторами:
Угол между DE и AC
Угол между DE и AF
Где меньший угол там и больше совпадение направления, люди также решают…нет?
Вообще непонятно, почему такой вывод, да ещё с комментарием "...нет?".
Остальные Ваши многочисленные то ли "советы", то ли "рецепты" оставляют такое же впечатление.
1
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
16.07.2019, 23:39  [ТС]
mathidiot, спасибо Вам за действительно простое и, в то же время, гениальное решение!
По поводу второго уравнения во второй системе - я либо написал его так, что Вы неверно интерпретировали то, что я написал, либо там есть ошибка, которой я не понимаю. На всякий случай я переписал систему в word'е (рисунок приложен).
Также, исходя из того, что Вы посоветовали, и руководствуясь желанием универсализировать всё и вся (), могу ли я дополнить систему уравнением с signum'ами представленным на рисунке образом? Теоретически, это должно заработать, но про то второе уравнение системы я тоже так думал
Миниатюры
Выбрать касательную к окружности  
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
16.07.2019, 23:51  [ТС]
Забыл добавить - это самое второе уравнение было мною взято с двух сайтов (дополняющих друг друга):
https://www.bymath.net/studygu... angeo3.htm
[delete]
, поэтому в чём именно у меня ошибка пока остаётся загадкой.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
17.07.2019, 08:13
Цитата Сообщение от mathidiot Посмотреть сообщение
иначе не стали бы рисовать "вектор" движения DE в стороне от окружности.
Это абсолютно никак не ухудшает универсальный алгоритм работы. Решение на все вопросы ТС одинаковое.
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
18.07.2019, 01:21  [ТС]
SSC, спасибо за Ваш ответ, но он мало что проясняет, если честно)
Я попытался использовать равенство нулю скалярного произведения двух векторов (касательной и радиуса), но получил те же результаты. А, буквально, час назад программа не выдала ни одного действительного решения - все комплексные; я с таким уже сталкивался, когда системе не хватало уравнений для решения (решается с помощью "solve" в MATLAB'е), но я, к сожалению, не вижу чего же её не хватает - 2 переменные и 2 уравнения, всё логично.
Не затруднит ли Вас подсказать мне, в чём же проблема?
0
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
18.07.2019, 04:18
Ромуальд_7, я решил вашу задачу (нашёл угол правого поворота), но с вашими обозначениями, отягощёнными индексами, записать это затруднительно. Вот зачем писать начальную точку (Х1,Y1), а конечную (x_1,y_1)? Не понятнее ли А и В? Точка (X2,Y2) вообще не нужна, она нигде не используется, и есть же координаты вектора направления.
Т.е. вам нужно знать 1) начало круговой траектории = точку начала вектора скорости, 2) сам вектор скорости, 3) точку, куда нужно попасть, у вас она справа вверху, 4) радиус и направление поворота.
Рассчитываются а) центр поворота, б) угол поворота <0, так как поворот правый, в) точку касания - первход круговой траектории в прямолинейный участок. Никаких неоднозначностей нет, вернее, они устраняются.
Сначала находится центр поворота: https://www.cyberforum.ru/cgi-bin/latex.cgi?O=A+\begin{pmatrix}0 & 1\\ -1 & 0\end{pmatrix}\frac{\bar{v}}{\left|\bar{v} \right|}R
Затем ищется угол поворота:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\sin \varphi =\frac{-R \cdot \left(B-A,\bar{v} \right)-\sqrt{OB^2-R^2}\begin{vmatrix}x_B-x_A & y_B-y_A\\ v_1 & v_2\end{vmatrix}+R\left|\bar{v} \right|\sqrt{OB^2-R^2}}{\left|\bar{v} \right| \cdot OB^2}\\\cos \varphi =\frac{ \sqrt{OB^2-R^2}\cdot \left(B-A,\bar{v} \right)-R\begin{vmatrix}x_B-x_A & y_B-y_A\\ v_1 & v_2\end{vmatrix}+R^2\left|\bar{v} \right|}{\left|\bar{v} \right| \cdot OB^2}
Нужен только косинус, а от синуса только его знак:
Если https://www.cyberforum.ru/cgi-bin/latex.cgi?\sin \varphi <0, то https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi =-arccos...
Если https://www.cyberforum.ru/cgi-bin/latex.cgi?\sin \varphi >0, то https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi =arccos... -2 \pi
После этого этот угол подставляется в формулу для точки С касания:
https://www.cyberforum.ru/cgi-bin/latex.cgi?C=A+\begin{pmatrix}-\sin \varphi  & 1-\cos \varphi \\ -1+\cos \varphi  & -\sin \varphi \end{pmatrix}\frac{\bar{v}}{\left|\bar{v} \right|}R
Эти формулы были проверены для таких тестовых значений (рис). Синим нарисовано то, что дано.
Миниатюры
Выбрать касательную к окружности  
1
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
19.07.2019, 23:06
Ромуальд_7, что-то вы молчите... Формулы страшные?
Выше промелькнуло, что вы используете Матбал. Чтобы получить приведённое выше решение (углы), нужно для правого поворота решить систему линейных уравнений по синусу и косинусу:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(\begin{matrix}-v_1R-v_2 \sqrt{OB^2-R^2} & -v_2R+v_1 \sqrt{OB^2-R^2}\\ -v_2R+v_1 \sqrt{OB^2-R^2} & v_1R+v_2 \sqrt{OB^2-R^2}\end{matrix} \left| \begin{matrix}\left(x_B-x_A \right)\left|\bar{v} \right|-v_2R\\ \left(y_B-y_A \right)\left|\bar{v} \right|+v_1R\end{matrix}\right)
, которую Матлаб легко делает, вычисляя обратную матрицу.
Для левого поворота в формуле для центра О нужно поменять знаки в матрице 2*2, синус и косинус ищется решением очень похожей системы:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(\begin{matrix}v_1R-v_2 \sqrt{OB^2-R^2} & v_2R+v_1 \sqrt{OB^2-R^2}\\ v_2R+v_1 \sqrt{OB^2-R^2} & -v_1R+v_2 \sqrt{OB^2-R^2}\end{matrix} \left| \begin{matrix}\left(x_B-x_A \right)\left|\bar{v} \right|+v_2R\\ \left(y_B-y_A \right)\left|\bar{v} \right|-v_1R\end{matrix}\right)
Точка касания С для левого поворота почти такая же, как и для правого, только нужно изменить знак в одном месте: "А - матрица".
Определение угла левого поворота (угол >0) такое:
Если https://www.cyberforum.ru/cgi-bin/latex.cgi?\sin \varphi <0, то https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi =2 \pi -arccos...
Если https://www.cyberforum.ru/cgi-bin/latex.cgi?\sin \varphi >0, то https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi =arccos...
Условие для возможности того или иного поворота - извлечение радикала https://www.cyberforum.ru/cgi-bin/latex.cgi?\sqrt{OB^2-R^2}, то есть https://www.cyberforum.ru/cgi-bin/latex.cgi?OB^2\geq R^2. Геометрически, поворот возможен, если целевая точка В находится вне окружности поворота.
Можете поиграться с разными параметрами в Экселе - менять желтые поля, а в оранжевых читать значения. Ну и диаграммка, как это выглядит.
Вложения
Тип файла: xlsx Правый и левый повороты автомобиля.xlsx (24.1 Кб, 3 просмотров)
1
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
20.07.2019, 00:18  [ТС]
jogano, да, что-то я и правда притих
Большое спасибо Вам за предложенный метод и подробные разъяснения!
Формулы не страшные, уж после динамики отделения управляемых ракет от ЛА-то, но представляют собой другой путь решения, отличный от моего.
Я решил задачу по совету mathidiot - через векторные произведения, а угол обхода нашёл с помощью комбинации значений векторного (от него - знак) и скалярного (от него - угол) произведений.
Так или иначе, в моей, уже полностью готовой, системе есть единственная ошибка, которую я хотел бы найти, но исходя из случаев, где она появляется, найти её не удаётся; в ряде случаев система либо находит только комплексные решения, либо решается в действительных числах, но неверно. К большому сожалению, люди, знающие в чём у меня ошибка, отмалчиваются, а я, попробовав ещё 2 способа заменить проблемное уравнение на другое, получал те же результаты.
Поскольку я использую матлаб, то гораздо проще написать аналитику процесса (СНлАУ аналитической геометрии) и заставить систему это решать как ей вздумается (тем более, что аналитического решения нет в принципе), просто получая результаты. кода - одна строчка; да, времени, полагаю, потратится больше, чем на Ваш метод, зато просто до безобразия.
0
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
20.07.2019, 00:28
Ромуальд_7, ну... вам решать, как делать. Как раз аналитическое решение я вам и написал, отчего же его нет?
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
20.07.2019, 02:23  [ТС]
jogano, ну это же не аналитика))
Геометрическая аналитика ведь строится на согласовании положений геометрических фигур, а явных уравнений фигур как таковых нет. Хотя, может я не прав, и аналитика это всё, что не имеет отношения к итерационным исчислениям.
Вас не затруднит подсказать, что значит вертикальная черта в матрицах (впервые вижу такую конструкцию) и что значит словосочетание
Цитата Сообщение от jogano Посмотреть сообщение
решить систему линейных уравнений по синусу и косинусу
?
0
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
20.07.2019, 03:24
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
аналитика это всё, что не имеет отношения к итерационным исчислениям.
Именно. Если вам написали точные формулы, то это есть аналитическое решение.
Вы стремитесь решать методами, которые понимаете - составлением уравнений прямых и окружностей, чтобы потом Матлаб с помощью чёрного ящика решал нелинейную систему. А я вам сделал, скажем так, геометрической арифметикой, то есть выполнив некоторые матричные операции. Правда, всё равно пришлось решать систему для поиска угла поворота, так что это всё-таки аналитическая геометрия.
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
Вас не затруднит подсказать, что значит вертикальная черта в матрицах (впервые вижу такую конструкцию) и что значит словосочетание....?
Понятно, нужен ликбез по алгебре... Тогда, если вы не понимаете такую запись и не владеете матричными операциями, решайте так, как вы понимаете.
Но тогда нет смысла спрашивать на форуме, почему иногда программа выдаёт комплексные решения. Решает чёрный ящик, это вопрос к разработчикам. Критерий возможности выполнения поворота я вам написал, и возможно, вводя в программу произвольные числа, вы иногда получаете целевую точку внутри окружности, вот Матлаб и выдаёт вам комплексные значения радикала. Вы не приводите никаких числовых данных, при которых так происходит...
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
21.07.2019, 02:11  [ТС]
jogano, боюсь Вы неверно истолковали мой вопрос.
Ликбез по линейной алгебре мне не требуется, я, что называется, вчера немного затупил и не признал Жордана-Гаусса (последний раз на 1 курсе дело было).
По поводу чёрного ящика - матлаб решает вполне определёнными методами, которые я, в большинстве их, понимаю и даже могу сделать ручками (да даже и делал на экзамене в январе). По примеру решения предшествующей этой задачи я понял, что матлаб - система вредная и любит максимальную (порой, на первый взгляд, избыточную) формализацию. В моей программе существует ряд случаев, когда система находит исключительно комплексные решения (хотя всё видно из картинки, ненавижу фразы типа "из рисунка видно", но всё же) или же когда система находит действительные решения, но они совершенно неверные. К чему я всё это - в предшествующей программе "комплексный синдром" вылечился после добавления в систему ещё одного уравнения, которое, на мой взгляд, систему переопределяло, следовательно, здесь системе нужно ещё одно уравнение, но какое? (а самое главное - зачем (казалось бы), ведь неизвестных две, как и уравнений).
(Кстати, пока я это писал, появилось предположение, которое я и проверю.)
Но ведь в тупик ставят первые два ответа в этой теме - о неправильности второго уравнения второй системы, при этом, ошибки я там не нашёл, а есть ли она на самом деле подсказать-то и некому, выходит (
Цитата Сообщение от SSC Посмотреть сообщение
Посмотрите внимательно на второе уравнение во второй системе
- усмотрелся ужО весь)


Добавлено через 3 часа 18 минут
В общем, глобальный вывод моих экспериментов таков: второе уравнение второй системы верно, поскольку взяв вместо него уравнение типа https://www.cyberforum.ru/cgi-bin/latex.cgi?A_1*A_2+B_1*B_2=0, где https://www.cyberforum.ru/cgi-bin/latex.cgi?A_{1/2} и https://www.cyberforum.ru/cgi-bin/latex.cgi?B_{1/2} - это коэффициенты радиальной (1) и касательной (2) прямых, я получил абсолютно те же результаты по всем основным экспериментально-дискретным случаям (в составе универсального метода).
Уж не знаю, на что именно указывали SSC и mathidiot. Таю надежду, что они-таки найдут ещё немного времени на меня.
0
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
21.07.2019, 03:40
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
Уж не знаю, на что именно указывали SSC и mathidiot.
Уважаемый mathidiot, когда написал
Цитата Сообщение от mathidiot Посмотреть сообщение
Для "зеленого" направления будет положительный знак, для "красного" - отрицательный.
понадеялся, что не нужно будет "жевать", что это означает, и написал кратко. А вы в посте #6 восприняли его совет буквально. Вот интересно, как вы понимаете "знак вектора"? В посте 6 у вас стоит sgn от векторного произведения, то есть от вектора. Какими словами по этому поводу ругается Матлаб?
(небольшой ликбез по векторной алгебре, у вас пробелы....) Имелось в виду, что в векторном произведении https://www.cyberforum.ru/cgi-bin/latex.cgi?\left[\bar{a},\bar{b} \right], где аргументы лежат в плоскости XOY, если поворот от первого вектора ко второму по кратчайшему углу делается против часовой стрелки, то вектор-результат направлен вверх, а если по часовой - вниз. mathidiot описал это словами "положительный знак" и "отрицательный знак". И вам нужно проверять не знак векторного произведения, а знак 3-й координаты этого произведения (а первые две координаты - нули). А для левого поворота наоборот - этот знак должен быть <0.
То есть
https://www.cyberforum.ru/cgi-bin/latex.cgi?z\left(\left[\bar{CO},\bar{CB} \right] \right)>0 \: \text{for right turn}\\z\left( \left[\bar{CO},\bar{CB} \right]\right)<0 \: \text{for left turn}
(использую обозначения рисунка поста #10, а использовать ваши - выше моих сил...)

Добавлено через 6 минут
Цитата Сообщение от Ромуальд_7 Посмотреть сообщение
В моей программе существует ряд случаев, когда система находит исключительно комплексные решения
Так приведите числа, для которых так получается, уже писал вам об этом, иначе это всё разговоры в пользу бедных... Вот и проверим (да вы и сами можете в Эксель-файле), у вас программа не правильная или просто нельзя сделать такой поворот.
1
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
22.07.2019, 00:51  [ТС]
jogano, Вот снова Вы понимаете мои слова неверно. Я знаю что такое векторное произведение, как и про правило буравчика; воспринял совет я не буквально, а прямо - вектор либо выше плоскости ("+1*k"), либо ниже её ("-1*k", где k - 3й орт в ортонормированной системе i,j,k), вот этот знак я и сравниваю.

Не по теме:

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


Цитата Сообщение от jogano Посмотреть сообщение
Какими словами по этому поводу ругается Матлаб?
Я действительно забыл это упомянуть, прошу прощения. Матлаб не ругается - при простой вставке предложенной мной конструкции (sign(...)=sign(...)) в структуру СНлАУ матлаб просто не видит ни одного решения (либо цифры в 8 знаке не совпадают у него, либо я вводил неправильно (но это не так, далее об этом)), поэтому я просто вынес эту конструкцию за пределы "решальщика системы" и прогнал через сравнение все решения, выдаваемые системой (на этом же этапе система отсеивает комплексные решения (да, пока что работаем в режиме "ситечко", не ругайтесь)), и всё прекрасно заработало.
Цитата Сообщение от jogano Посмотреть сообщение
Так приведите числа, для которых так получается
Дело в том, что я просил помощи в более простом случае, нежели тот, который я рассматриваю на самом деле; на самом деле я ищу касательную к двум окружностям, которые заданы векторами. Я приведу конструкцию решальщика и рисунок и цифры к случаю, где все решения комплексные (простите, но переделывать имена я не буду - запутаюсь ):
Matlab M
1
2
3
4
5
6
7
8
9
syms xc1 yc1
[xc1sol, yc1sol] = solve([Ap1*(X1-xc1)+Bp1*(Y1-yc1)==0, (X1-xc1)^2+(Y1-yc1)^2==R^2], [xc1, yc1]);
    xc1sol = double(xc1sol); 
    yc1sol = double(yc1sol); 
pause(0.1);
syms xc2 yc2
[xc2sol, yc2sol] = solve([Ap2*(X2-xc2)+Bp2*(Y2-yc2)==0, (X2-xc2)^2+(Y2-yc2)^2==R^2], [xc2, yc2]);
    xc2sol = double(xc2sol); 
    yc2sol = double(yc2sol);
Эта пара систем "строит" по две окружности по обе стороны от начальных векторов, исходящих из точек (X1;Y1) и (X2;Y2); Ap1 и Bp1 - коэффициенты прямой, перпендикулярной начальному вектору 1 и проходящей через точку его начала (аналогично для второго); (xc1;yc1) - координаты центра окружности у вектора 1.
При решении будут получены вектор-столбцы (xc1sol и три других), содержащие пару координат центров окружностей по обе стороны от вектора.
Далее так:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
syms xkas1 ykas1 xkas2 ykas2
for vari1 = 1:1:2
    for vari2 = 1:1:2
        [xkas1sol, ykas1sol, xkas2sol, ykas2sol] = solve([(xc1sol(vari1)-xkas1)^2+(yc1sol(vari1)-ykas1)^2==R^2,...
        (xc2sol(vari2)-xkas2)^2+(yc2sol(vari2)-ykas2)^2==R^2,...
        (xkas1-xc1sol(vari1))*(xkas2-xc1sol(vari1))+(ykas1-yc1sol(vari1))*(ykas2-yc1sol(vari1))==R^2,...
        (xkas2-xc2sol(vari2))*(xkas1-xc2sol(vari2))+(ykas2-yc2sol(vari2))*(ykas1-yc2sol(vari2))==R^2,... 
        (ykas1-ykas2)*(ykas1-yc1sol(vari1))+(xkas2-xkas1)*(xc1sol(vari1)-xkas1)==0,...
        (ykas1-ykas2)*(yc2sol(vari2)-ykas2)+(xkas2-xkas1)*(xkas2-xc2sol(vari2))==0], [xkas1, ykas1, xkas2, ykas2]);
        xkas1sol = double(xkas1sol); 
        ykas1sol = double(ykas1sol);
        xkas2sol = double(xkas2sol); 
        ykas2sol = double(ykas2sol);
    end
end
В этом куске вырезана часть про отсеивание комплексных и выборку по признаку "sign=sign", но смысл сохраняется. Эта система принимает на вход координаты центров двух окружностей (от разных векторов) и "рассчитывает" их; vari1 - это вариант окружности у первого вектора (их же две, а сразу по две система не кушает), vari2 - соответственно то же самое для второго вектора; таким образом, запись "xc1sol(vari1)" означает использование решения предыдущей системы для центра первой окружности, имеющую номер 1 или 2 (определяется текущим значением vari1); (xkas1; ykas1) - координаты точки касания на первой окружности, (xkas2; ykas2) - соответственно, на второй окружности.

Не по теме:

Я обычно стараюсь, чтобы имена переменных говорили сами за себя, но в начале этой темы меня как-то знесло.


В приведённых на рисунке ниже числах, кроме уже описанных мной, есть ещё (xp1;yp1) (и с индексом 2) - это разность координат точки конца вектора и точки его начала в (X1;Y1) (для 2 - аналогично), то есть, https://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt{xp1^2+yp1^2} = |\vec{vector1}|.
Представленная на рисунках ситуация как раз очень удачно охватывает весь спектр моих вопросов - и одно действительное верное решение программа показывает, и одно действительное неверное, и вдовесок 4 комплексных решения, хотя существует 3 действительных (нарисовано мной ниже). Само по себе представляет интерес уже то, что откуда-то берутся 6 решений вместо 4, какие бы числа не вводились в систему.
Миниатюры
Выбрать касательную к окружности   Выбрать касательную к окружности  
0
194 / 29 / 5
Регистрация: 11.04.2015
Сообщений: 735
22.07.2019, 00:56  [ТС]
Забыл добавить - радиус обеих окружностей принят равным 14 и является константой всегда; а на уравнения на строках 8 и 9 второй вставки кода можете не ругаться - я знаю, что фактически они несут тот же смысл, что и 6-7, но это был эксперимент, который, такое ощущение, что что-то частично починил в решении (субъективная оценка).
0
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
22.07.2019, 22:56
Так. Я сделал вашу задачу в Маткаде с помощью чёрного ящика (решателя). Матлаба у меня нет на компьютере, нельзя повесить. С вашими данными.
Точка касания:
- окружность левого вращения с окружностью левого вращения (нижняя касательная). Точки касания слева (3,543; 19,516), точка касания справа (53,751; 34,61)
- окружность левого вращения с окружностью правого вращения (внутренняя касательная). Точки касания слева (5,77; 20,4), точка касания справа (70,35; 52,66)
- окружность правого вращения с окружностью левого вращения (внутренняя касательная). Такого решения нет, так как окружности пересекаются. Маткад выдал одну из точек их пересечения, что формально удовлетворяет условиям (нуль-вектор между этими точками перпендикулярен всем векторам, в том числе векторам-радиусам).
- окружность правого вращения с окружностью правого вращения (верхняя касательная). Точки касания слева (26,412; 51,675), точка касания справа (75,897; 54,119)
Откройте маткадовский файл (Prime 4.0) и извлекайте сами критерии. По-моему, самое время перефутболить вашу тему в Матлаб, в геометрии ей делать больше нечего. Пусть там мучаются с чёрным ящиком и с обозначениями до 6 символов...
Вложения
Тип файла: rar Повороты автомобиля.rar (15.0 Кб, 4 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2019, 22:56
Помогаю со студенческими работами здесь

Выбрать окружности, длина которых больше 7, но меньше 10, и записать в файл таблицу
В текстовом файле содержатся радиусы 12 окружностей. Выбрать окружности, длина которых больше 7, но меньше 10 , и записать в файл таблицу,...

Найти касательную
Помогите пожалуйста! Найти касательную к элипсу проходящую через точку N. (x^2/25)+(y^2/16)=1 N(10;4)

Найти касательную к эллипсу
Здравствуйте! Есть такая задача, не могу ее решить. Имеется график функции S(фи)-V(фи),который представляет собой два эллипса,соединенных...

Провести касательную к эллипсу
Здравствуйте! Скажите, пожалуйста, как провести из точки касательную к эллипсу? Эллипс у меня - это окружность в пространстве. Точка на...

Как построить касательную
Как построить касательную на С# ? Помогите вообще беда, не могу даже понять с чего начать... Уравнение любое, главное чтоб касательная...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru