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]]

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

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)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.