Помощь - Поиск - Пользователи - Календарь
Полная версия: Как построить стороны треугольников и закрасить область, принадлежащую треугольнику
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Coconut
Даны действительные числа x[1..6], y[1..6]. Точки с координатами (x[1],y[1]),(x[2],y[2]),(x[3],y[3]) рас-
cматриваются как вершины первого треугольника, точки с координатами (x[4],y[4]),(x[5],y[5]),(x[6],y[6]) -
второго треугольника.
Выяснить, лежитли какой-либо из треугольников целиком внутри другого. Если да, построить стороны треугольников и закрасить область, принадлежащую внешнему треугольнику и не принадлежащую внутреннему. Построения сторон и закраску области выполнить одним цветом. Если ни один из треугольников не лежит целиком внутри другого, построить стороны треугольников, используя для каждого треугольника свой цвет. (Определить процедуру, позволяющую выяснить, лежат ли две точки в одной полуплоскости относительно заданной прямой, и процедуру построения сторон треугольника по заданным координа там вершин и номеру цвета)
Выяснил, лежит ли один треугольник внутри другого, ниже текст программы, как нарисовать не знаю - не разу этого не делал, как это можно сделать для данной задачи?

Program treugolniki;
uses crt;
var
x,y: array [1..6] of integer;
i,j:integer;
f1,f2,f3:real;
procedure vtoroi;
begin
f1:=((x[4]*(y[1]-y[2])+x[1]*y[2]-x[2]*y[1])/(x[2]-x[1]))-y[4];
f2:=((x[5]*(y[1]-y[2])+x[1]*y[2]-x[2]*y[1])/(x[2]-x[1]))-y[5];
f3:=((x[6]*(y[1]-y[2])+x[1]*y[2]-x[2]*y[1])/(x[2]-x[1]))-y[6];

if (f1<0) and (f2<0) and (f3<0) then
begin
f1:=(x[4]*(y[3]-y[2])+x[3]*y[2]-x[2]*y[3])/(x[3]-x[2])-y[4];
f2:=(x[5]*(y[3]-y[2])+x[3]*y[2]-x[2]*y[3])/(x[3]-x[2])-y[5];
f3:=(x[6]*(y[3]-y[2])+x[3]*y[2]-x[2]*y[3])/(x[3]-x[2])-y[6];


if (f1>0) and (f2>0) and (f3>0) then
begin
f1:=(x[4]*(y[1]-y[3])+x[1]*y[3]-x[3]*y[1])/(x[1]-x[3])-y[4];
f2:=(x[5]*(y[1]-y[3])+x[1]*y[3]-x[3]*y[1])/(x[1]-x[3])-y[5];
f3:=(x[6]*(y[1]-y[3])+x[1]*y[3]-x[3]*y[1])/(x[1]-x[3])-y[6];

if (f1<0) and (f2<0) and (f3<0) then
writeln('2 v 1 lezhit')
else
writeln('2 v 1 ne lezhit')
end
else
writeln('2 v 1 ne lezhit');

end
else
writeln('2 v 1 ne lezhit')
end;

procedure pervii;
begin
f1:=((x[1]*(y[4]-y[5])+x[4]*y[5]-x[5]*y[4])/(x[5]-x[4]))-y[1];
f2:=((x[2]*(y[4]-y[5])+x[4]*y[5]-x[5]*y[4])/(x[5]-x[4]))-y[2];
f3:=((x[3]*(y[4]-y[5])+x[4]*y[5]-x[5]*y[4])/(x[5]-x[4]))-y[3];
if (f1<0) and (f2<0) and (f3<0) then
begin
f1:=(x[1]*(y[6]-y[5])+x[6]*y[5]-x[5]*y[6])/(x[6]-x[5])-y[1];
f2:=(x[2]*(y[6]-y[5])+x[6]*y[5]-x[5]*y[6])/(x[6]-x[5])-y[2];
f3:=(x[3]*(y[6]-y[5])+x[6]*y[5]-x[5]*y[6])/(x[6]-x[5])-y[3];

if (f1>0) and (f2>0) and (f3>0) then
begin
f1:=(x[1]*(y[4]-y[6])+x[4]*y[6]-x[6]*y[4])/(x[4]-x[6])-y[1];
f2:=(x[2]*(y[4]-y[6])+x[4]*y[6]-x[6]*y[4])/(x[4]-x[6])-y[2];
f3:=(x[3]*(y[4]-y[6])+x[4]*y[6]-x[6]*y[4])/(x[4]-x[6])-y[3];

if (f1<0) and (f2<0) and (f3<0) then
begin
writeln('1 vo 2 lezhit');
writeln('2 v 1 ne lezhit')
end
else
begin
writeln('1 vo 2 ne lezhit');
vtoroi
end

end
else
begin
writeln('1 vo 2 ne lezhit');
vtoroi
end
end
else
begin
writeln('1 vo 2 ne lezhit');
vtoroi
end
end;



begin
clrscr;
writeln ('Vvedite koordinati x');
for i:=1 to 6 do
readln(x[i]);
writeln ('Vvedite koordinati y');
for i:=1 to 6 do
readln(y[i]);
pervii;

readln
end.


.
volvo
Смотри в Help-е Паскаля процедуру DrawPoly для отрисовки и FillPoly для заполнения, там есть и пример использования...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.