LINUX.ORG.RU

Расчёт в wxMaxima

 


0

1

Уважаемые знатоки,

никак не пойму, почему Maxima не посчитает, то что мне нужно.

В системе координат заданы две точки x1 (53;123) и x2 (127;47). Необходимо найти координаты центров возможных окружностей, которые могут быть построены через эти точки. r = 97. Составляется система из двух уравнений с использованием уравнения окружности, которое в общем виде выглядит так: (x - x0)^2 + (y - y0)^2 = r^2.

(53-x)^2+(123-y)^2=97^2;
(127-x)^2+(47-y)^2=97^2;
solve([(53-x)^2+(123-y)^2=97^2, (127-x)^2+(47-y)^2=97^2], [x, y]);

Результат выполнения (картинкой):

[]

Увеличение радиуса ничего не дало.

Считать самому лениво.

Упрощённая версия считается корректно:

solve([(2-x)^2+(2-y)^2=1, (3-x)^2+(1-y)^2=1],[x, y]);
[[x=2,y=1],[x=3,y=2]]


Последнее исправление: gatsu (всего исправлений: 1)

Ответ на: комментарий от BattleCoder

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

gatsu
() автор топика

что-то сам не знаю, тоже не получается... а попробуйте пример что ли попроще =) с цифрами поменьше. на который точно знаете ответ

BattleCoder ★★★★★
()
Ответ на: комментарий от gatsu

ага... в общем да.. (я уже что-то плоховато школьную геометрию помню).

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

в вашем примере радиус вы точно задали 97, я что-то думаю, что вполне возможно такого и не существует...

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

Похоже на правду.

А вот мой упрощённый пример:

solve([(2-x)^2+(2-y)^2=1, (3-x)^2+(1-y)^2=1],[x, y]);
[[x=2,y=1],[x=3,y=2]]

Работает же!

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

С разными радиусами — бесконечно много, главное, чтобы радиус был больше или равен длине отрезка между точками, а то не получится через обе точке построить окружность. Но радиус в моём случае строго указан, поэтому можно построить только две (так, что дуга между точками получится вогнутая и выпуклая)

в вашем примере радиус вы точно задали 97, я что-то думаю, что вполне возможно такого и не существует...

Графически (набросок в тетрадке) его существование подтверждается.

gatsu
() автор топика
Ответ на: комментарий от BattleCoder

Спасибо за помощь!

Завтра, похоже, придётся самостоятельно подсчитать. Только вторая лаба по разработке УП для ЧПУ, а я застрял на весь вечер с этими дурацкими кругами %)

gatsu
() автор топика
Ответ на: комментарий от gatsu

В wxmaxima можно тоже графики строить... в том числе через gnuplot. Возможно, построить два графика и найдёте решение? :)

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

Я утром попытался вывести формулы для расчёта, что бы составить алгоритм и посчитать для каждой дуги. Но получились довольно громоздкие уравнения с большими степенями, поэтому я плюнул и воспользовался старым добрым МатКадом.

gatsu
() автор топика
Последнее исправление: gatsu (всего исправлений: 1)
Ответ на: комментарий от gatsu

то есть вы хотите сказать, что уравнение решение _имеет_, но maxima его не взяла? а маткад взял? интересно...

мб повод для баг-реппорта?

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

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

Возможно, похоже на баг.

gatsu
() автор топика

Упрощенный код ошибки:

f1:(x-1)^2+(y)^2=2^2;
f2:(x)^2+(y-1)^2=2^2;
solve([f1,f2],[x,y]);
[f1_1,f1_2]:map(lambda([f],last(f)),solve(f1,y));
[f2_1,f2_2]:map(lambda([f],last(f)),solve(f2,y));
plot2d([f1_1,f1_2,f2_1,f2_2],[x,-2,3]);
build_info();
Проверить можно тут: http://maxima-online.org/
Багрепорт похожего вида: http://sourceforge.net/p/maxima/bugs/1302/

anonymous
()
load(to_poly_solve);
eq1: (53-x)^2+(123-y)^2=97^2;
eq2: (127-x)^2+(47-y)^2=97^2;
to_poly_solve([eq1, eq2], [x, y], 'use_grobner=true);
                     76 sqrt(493) - 2610        74 sqrt(17) sqrt(29) - 2465
(%o12) %union([x = - -------------------, y = - ---------------------------], 
                             29                             29
                         76 sqrt(493) + 2610      74 sqrt(17) sqrt(29) + 2465
                    [x = -------------------, y = ---------------------------])
                                 29                           29
vital303
()
Ответ на: комментарий от vital303

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

use_grobner=true

Primarily, this option provides a workaround for weakness in the function algsys.

Спасибо за найденное решение.

gatsu
() автор топика
Последнее исправление: gatsu (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.