Провести прямую (а не отрезок) через заданные точки - Pascal ABC
Формулировка задачи:
Дан отрезок с координатами (x1,x2);(x2,y2). Как провести через эти точки прямую на все окно?(а не только отрезок прямой)
Решение задачи: «Провести прямую (а не отрезок) через заданные точки»
textual
Листинг программы
uses graphABC; var x1,y1,x2,y2:integer; k,x,y,c:real; begin repeat writeln('Введите координаты первой точки от 50 до 450:'); readln(x1,y1); until(x1>=50)and(x1<=450)and(y1>=50)and(y1<=450); repeat writeln('Введите координаты второй точки от 50 до 450:'); readln(x2,y2); until(x2>=50)and(x2<=450)and(y2>=50)and(y2<=450)and((x1<>x2)or(y1<>y2)); setwindowsize(500,500); centerwindow; setpencolor(clRed); setbrushcolor(clRed); circle(x1,y1,3); circle(x2,y2,3); setbrushstyle(bsClear); setfontsize(12); textout(x1+10,y1-15,'A'); textout(x2+10,y2-15,'B'); // вертикальная setpencolor(clBlue); if x1=x2 then begin x:=x1; y:=0; while y<windowheight do begin if y=0 then moveto(round(x),round(y)) else lineto(round(x),round(y)); y:=y+0.1; end end //горизонтальная else if y1=y2 then begin x:=0; y:=y1; while x<windowwidth do begin if x=0 then moveto(round(x),round(y)) else lineto(round(x),round(y)); x:=x+0.1; end end //наклонные else begin x:=0; k:=(y1-y2)/(x2-x1); c:=y2+x2*k; while x<=windowwidth do begin y:=-round((k*x-c)); if x=0 then moveto(round(x),round(y)) else lineto(round(x),round(y)); x:=x+1; end; end; end.
Объяснение кода листинга программы
- Используется библиотека graphABC.
- Задаются две точки с координатами x1, y1 и x2, y2.
- Устанавливается размер окна приложения.
- Выбирается цвет кисти и фона.
- Рисуются окружности с координатами x1, y1 и x2, y2.
- Выводится текст A и B с координатами x1, y1 и x2, y2 соответственно.
- Устанавливается цвет шрифта.
- Если координаты x и y совпадают, то рисуется горизонтальная прямая.
- Если координаты y совпадают, то рисуется вертикальная прямая.
- Если координаты x и y различны, то рисуется наклонная прямая.
- Программа заканчивается.