Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2016, 17:40   #1
ArtemStark
Новичок
Джуниор
 
Регистрация: 06.12.2016
Сообщений: 2
По умолчанию Вычислить методом сканирования точки пересечения графиков функций - PascalABC.NET

Доброго времени суток уважаемые программисты.

Прошу помочь в решении. Требуется найти точки пересечения окружности и эллипса методом сканирования(проб).
Никак не мог додумать как это реализовать. По идее, для вычисления точек пересечения нужно решить систему уравнений. То есть, из одного уравнения выразить переменную Y и подставить в другое, далее перебором иксов найти такой X при котором оба уравнения будут равными. Это и будет наша точка пересечения. Моя программа вычисляет обе точки. Но я не уверен что вычисляет правильно. Помогите пожалуйста с решением, буду очень признателен.
Код:
 program Cross;
 
 uses crt;
 Const a=22;      {Полуось эллипса}
       b=40;      {Полуось эллипса}
       r=32;      {Радиус окружности}
var
       xn,x20el,Y2elips,dx,x,y,n,Xok,Yok,Aok,Bok,Cok,X0,Y0,Xel,Yel,Y1ok,Y1el,X0el,Y0el,OK,EL,YElips,Y2Elps,YOkrs,Y2Okrs,ok1,el1:real;
begin
Xok:=-25;
Yok:=0;
Y1ok:=-26;
Aok := 1;
Bok := -2*Xok;
Cok := Xok*Xok+(Yok-Y0)*(Yok-Y0)-R*R;
//Нахождение X0,Y0 Окружности
Y0:=Y1ok + R;
X0:=(-Bok+sqrt(Bok*Bok-4*Aok*Cok))/(2*Aok);
Writeln('X0 Окружности', X0);
Writeln('Y0 Окружности ', Y0);
//Нахождение X0,Y0 Эллипса
Xel:=-32;
Yel:=0;
Y1el:=-45;
Y0el:=Y1el + b;
X0el:=Xel+a*Sqrt(1-sqr(Y0el/b));
Writeln('X0 Эллипса ', X0el:1:3);
Writeln('Y0 Эллипса', Y0el);
dx:=0.001;
x:=-10;
begin
repeat
y:=sqrt(r*r-sqr(x-X0))+Y0;
x:=x+dx;
until ((sqr(x-X0el))/sqr(a))+((sqr(y-Y0el))/sqr(b))>=1;
writeln('koordinati A',' ','x=',x:1:3,' ','y=',y:1:3);
repeat
y:=-sqrt(r*r-sqr(x-X0))+Y0;
x:=x+dx;
until ((sqr(x-X0el))/sqr(a))+((sqr(y-Y0el))/sqr(b))>=1;
writeln('koordinati B',' ','x=',x:1:3,' ','y=',y:1:3);
end;
ArtemStark вне форума Ответить с цитированием
Старый 06.12.2016, 17:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Реши на бумаге, там сводится к уравнению 4-ой степени. В справочниках найди способы решения (Декарта-Эйлера или Феррари). Сравни с програмным решением. И неуверенность куда денется, а признательности самому себе будет через край
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.12.2016, 20:50   #3
ArtemStark
Новичок
Джуниор
 
Регистрация: 06.12.2016
Сообщений: 2
По умолчанию

Уже сделано) Самое интересное, что ответы совпадают.
Просто хотел проверить сам код на корректность...
ArtemStark вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Точки пересечения графиков нулевой и третий отобразить мигающим цветом лимонным Kaktus71 Паскаль, Turbo Pascal, PascalABC.NET 0 30.05.2016 21:54
PascalABC.NET Вычислить сумму ряда. ser18 Помощь студентам 22 07.03.2016 07:05
Решение системы методом Гаусса-Жордана / PascalABC.NET now2 Помощь студентам 28 15.04.2014 23:32
Напишите программу решения уравнений методом бисекции с наперед заданной точностью / PascalABC.NET now2 Паскаль, Turbo Pascal, PascalABC.NET 6 14.03.2014 07:37
Вычислить интеграл введенный с клавиатуры пользователем,методом Симпсона(параболы).PascalABC Sanginow Помощь студентам 0 16.04.2012 12:56