IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Точки треугольника
vano
сообщение 17.02.2005 13:50
Сообщение #1


Гость






Пожалуйста, помогите с решением вот такой задачки:

Задан треугольник (x1,y1,x2,y2,x3,y3) . Вычислить, какие точки с целыми координатами находятся внутри него и вывести в отдельный файл их количество и координаты.

У меня получилось такое:

Код

Program tochki_treugolnika;
uses crt;
var
  f : text;
  i, j, ymin, ymax, xmin, xmax, x1, y1, x2, y2, x3, y3, x, y, k : integer;


function rasst ( x1, x2, y1, y2 : real) : real;
  begin
     rasst := sqrt(sqr(x2-x1)+sqr(y2-y1))
  end;

function Angle ( c, a, b : real) : real;
var mycos, mysin : real;
  begin
     mycos := (a*a+b*b-c*c)/(a*b)/2;
     mysin := sqrt (1 - sqr (mycos));
     Angle := arctan (mysin/mycos)
  end;

function gde (x1,y1,x2,y2,x3,y3,x,y:real) : boolean;
  var
     an1, an2, an3 : real;
  begin
     an1 := Angle (rasst (x1, x2, y1, y2), rasst (x1, x, y1, y), rasst (x2, x, y2, y));
     an2 := Angle (rasst (x2, x3, y2, y3), rasst (x2, x, y2, y), rasst (x3, x, y3, y));
     an3 := Angle (rasst (x3, x1, y3, y1), rasst (x3, x, y3, y), rasst (x1, x, y1, y));
     gde := (an1 + an2 + an3 > 2*PI - 0.01)
  end;




begin
  clrscr;


  writeln ('Введите x1,y1,x2,y2,x3,y3');
  readln (x1,y1,x2,y2,x3,y3);

  {Assign (f,'c:\Pascal\samples\sample33.txt');
  Rewrite (f);
   }

  if x3 < x1 then
     if x2 < x3 then xmin := x2
     else xmin := x3
  else if x2 < x1 then xmin := x2 else xmin := x1;


  if x3 > x1 then
     if x2 > x3 then xmax := x2
     else xmax := x3
  else if x2 > x1 then xmax := x2 else xmax := x1;



  if y3 < y1 then
     if y2 < y3 then ymin := y2
     else ymin := y3
  else if y2 < y1 then ymin := y2 else ymin := y1;


  if y3 > y1 then
     if y2 > y3 then ymax := y2
     else ymax := y3
  else if y2 > y1 then ymax := y2 else ymax := y1;

  for x := xmin + 1 to xmax - 1 do
      for y := ymin + 1   to ymax - 1 do
          begin
               if gde (x1,y1,x2,y2,x3,y3,x,y) = false
               then
               begin
                    writeln ('Точка (',x,';',y,') находится внутри треугольника ');
                    inc(k);
               end;
          end;
  writeln ('f, ');
  writeln ( 'f‚ В треугольнике находится ',k,' точек');
 { close (f);}



  repeat until keypressed
end.



У меня возникает глюк в функции Angle при вычислении то-ли косинуса, то-ли синуса. как мне это исправить?
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 17.02.2005 17:48
Сообщение #2


Гость






Михаил Густокашин, человек ясно сказал:
Цитата(vano @ 17.02.05 12:50)
У меня возникает глюк в функции Angle при вычислении то-ли косинуса, то-ли синуса. как мне это исправить?

Предложения с Вашей стороны по теме вопроса есть? Если нет, извините, это флуд...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 11:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"