Я не знаю ни деталей Sage (в котором, я думаю, ваш код), ни Mathematica, но я могу указать на некоторые трудности.
Во-первых, я считаю, что вам нужно "поймать" математикупеременные, которые вы определяете в переменных языка.Таким образом, вам может понадобиться
x1, y1, x2, y2 = var('x1, y1, x2, y2') # tangent points
m1, b1, m2, b2 = var('m1, b1, m2, b2') # lines' eqn
x0, y0, r = var('x0, y0, r') # cirsle's eqn
Затем вы объедините все свои уравнения в одну команду solve
.Как видно из диаграммы, на окружности и на обеих линиях нет точек, но вы пытаетесь найти все точки, удовлетворяющие всем вашим уравнениям одновременно.Вы должны разделить ваш единственный solve
на две команды, по одной для каждой строки.
Далее, в ваших требованиях нет ничего, что делало бы ваши линии касательными к данной кривой.Для в основном произвольной окружности и прямой может не быть ни одной, ни одной или двух точек пересечения, и крайне маловероятно, что возникнет ровно одна точка.Вам нужно ограничение, чтобы каждая линия касалась кривой.Это ограничение довольно сложно программировать и кажется не проще, чем просто найти точку пересечения.Вы уверены, что подход, который вы используете, подходит для вашей проблемы?
Существуют дополнительные трудности в обеспечении того, что точки касания находятся в первом квадранте, но это менее важно, чем другие трудности.
Наконец, в вашем коде нет ничего, что указывало бы на то, что ваши известные значения равны m1, b1, m2, b2, r
, и вы хотите, чтобы x0, y0
выпало из окончательных выражений.(Вы заявляете, что хотите получить выражения для x1, y1, x2, y2
.) Я не знаю, как это сделать в Sage или Mathematica.
Проблема математики не так уж и сложна.Точка (x0, y0)
должна лежать на линиях, параллельных заданным вами линиям, и на расстоянии r
от линий.Это дает четыре очка за (x0, y0)
.Для каждого из них вы найдете точки на заданных вами линиях, наиболее близкие к этим точкам (x0, y0)
.Это дает четыре очка, тогда вы просто выбираете те, что в первом квадранте.Другой, более быстрый, тригонометрический подход заключается в том, чтобы найти угол между двумя заданными линиями, затем вы можете использовать триг, чтобы найти расстояние от нужных вам точек до точки пересечения, а затем найти точки.
Вы уверены, что вам нужноSage / Mathematica, чтобы сделать это для вас?