Паскаль Графика !

  • Автор темы BuTeK
  • Дата начала
B

BuTeK

#1
Уважаемые программисты !
Помогите пожалуста доделать задачу !
Задание
С клавиатуры ввести кардинаты точки. Программа должна определить находится ли точка в графическом режиме на нарисованных фигурах (с x и y осью и соответствующими кардинатами ) внутри,снаружи, или на линии ! Точку надо показать на рисунке и вывести соответствующие сообщение на экран. Фигуры закрасить полосками.
Использовать оператор if ! Я незнаю что нужно писать чтобы определялась где находится точка (внутри,снаружи или на линии) !
Вот что я написал -
Program uzd1;

Uses graph,crt;

Var a,r,b,c,x,y,e,midx,midy:integer;

Begin
writeln('Vvedite to4ki');
read(a,:);


x:=detect;

InitGraph(x,y,' ');


e:=graphresult;

if e<>grok then writeln ('ERROR');


CLEARDEVICE;
SETCOLOR(1);
MOVETO(GETMAXX DIV 2, GETMAXY DIV 2);
OUTTEXTXY(GETX, GETY,'0');


midx:=getmaxX div 2;

midy:=getmaxy div 2;

Line(0, round(GetMaxY/2), GetMaxX,

Round(GetMaxY/2));

Line(round(GetMaxX/2), 0,

Round(GetMaxX/2), GetMaxY);


Rectangle(midx-400,midy+0,midx-200,midy-200);

rectangle(midx - 0,midy - 200 ,midx + 200 , midy + 0 );

CIRCLE (735, 600, 100);

SetfillStyle(5,brown);
floodfill(midx-100,midy+100,blue);
floodfill(midx+100,midy-100,blue);
floodfill(midx-300,midy-100,blue);


setcolor(green);
outtextxy(midx+5,midy-200,'+2');
outtextxy(midx-200,midy-10,'-2');
outtextxy(midx+200,midy-10,'+2');
outtextxy(midx-400,midy-10,'-4');
outtextxy(midx+5,midy+200,'-2');
Setfillstyle(1,4);
setcolor(4);
Sector (midx+a*100,midy-b*100,0,360,4,4);
readkey;
Readln;

CloseGraph;
End.
BuTeK1 вне форума Ответить с цитированием
 

Вложения

B

BuTeK

#2
С квадратами я розабрался !
подскажите пожалуйста как быть с кругом ??
Kак посчитать когда точка находиться на линии круга используя оператор if !
 
B

BurcevD

#3
Делается все довольно просто:
1. Точка лежит внутри круга если расстояние от введенной точки до центра круга меньше его радиуса
2. Точка лежит на линии -=-=- если равна радиусу
3. Точка вне круга, если расстояние больше радиуса
в вашем случае радиус равен 1, расстояние от центра окружности до введенной точки равно
d:=sqrt(sqr(xv-xc)+sqr(yv-yc));
где xc,yc - точка центр окружности, т.е. xc=-1; yc:=-1;
xv, yv - координаты введенной точки
т.е. в принципе если без графики то можно сделать так
Код:
 Readln(xv, yv);
//Проверка на левый квадрат
If (xv>-4)and(xv<-2)and(yv>0)and(yv<2) then writeln('Лежит внутри левого квадрата') else
If (xv>=-4)and(xv=<-2)and(yv>=0)and(yv=<2) then writeln('Лежит на линии левого квадрата') else
//Проверка на правый квадрат
If (xv>0)and(xv<2)and(yv>0)and(yv<2) then writeln('Лежит внутри правого квадрата') else
If (xv>=0)and(xv=<2)and(yv>=0)and(yv=<2) then writeln('Лежит на линии правого квадрата') else
//Проверка на круг
if (sqrt(sqr(-1-xv)+sqr(-1-yv))<1) then Writeln('Лежит внутри круга') else
if (sqrt(sqr(-1-xv)+sqr(-1-yv))=1) then Writeln('Лежит на линии круга') else
Writeln('Лежит ВНЕ фигур');
 
B

BuTeK

#4
Почему-то с дробными числами не полочается !! пишет что не в фигуре !
 
B

BurcevD

#5
Все считает правильно, попробуйте вручную, у вас получится, что расстояние от точки (-1.1;0) до центра окружности (-1;-1) равна 1,004987562112089027021926491276, а радиус окружности равен 1, соответственно чисто математически точка лежит вне окружности, но если смотреть графически, то компьютер просто не может показать разницу между линии окружности и точкой, он округляет, если вам нужно сделать все графически, то округлите результат квадратного корня, т.е.
<!--shcode--><pre><code class='pascalt'>//Проверка на круг
if (Round(sqrt(sqr(-1-xv)+sqr(-1-yv)))<1) then Writeln('Лежит внутри круга') else
if (Round(sqrt(sqr(-1-xv)+sqr(-1-yv)))=1) then Writeln('Лежит на линии круга') else
Writeln('Лежит ВНЕ фигур');[/CODE]
 
B

BuTeK

#6
А понел !
Большое спасибо за помощь ! Очень помогли !