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

Тема в разделе "Delphi - Multimedia, Графика, Игры", создана пользователем BuTeK, 8 янв 2009.

  1. BuTeK

    BuTeK Гость

    Уважаемые программисты !
    Помогите пожалуста доделать задачу !
    Задание
    С клавиатуры ввести кардинаты точки. Программа должна определить находится ли точка в графическом режиме на нарисованных фигурах (с 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 вне форума Ответить с цитированием
     

    Вложения:

  2. BuTeK

    BuTeK Гость

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

    BurcevD Гость

    Делается все довольно просто:
    1. Точка лежит внутри круга если расстояние от введенной точки до центра круга меньше его радиуса
    2. Точка лежит на линии -=-=- если равна радиусу
    3. Точка вне круга, если расстояние больше радиуса
    в вашем случае радиус равен 1, расстояние от центра окружности до введенной точки равно
    d:=sqrt(sqr(xv-xc)+sqr(yv-yc));
    где xc,yc - точка центр окружности, т.е. xc=-1; yc:=-1;
    xv, yv - координаты введенной точки
    т.е. в принципе если без графики то можно сделать так
    Код (Text):
     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('Лежит ВНЕ фигур');
     
  4. BuTeK

    BuTeK Гость

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

    BurcevD Гость

    Все считает правильно, попробуйте вручную, у вас получится, что расстояние от точки (-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]
     
  6. BuTeK

    BuTeK Гость

    А понел !
    Большое спасибо за помощь ! Очень помогли !
     
Загрузка...

Поделиться этой страницей