Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2011, 16:28   #1
JL25A
Пользователь
 
Регистрация: 06.08.2011
Сообщений: 11
По умолчанию Определить имеют ли общие точки две плоские фигуры

Нужно определить имеют ли общие точки две плоские фигуры: прямоугольник с задаными координатами вершин и круг с заданым радиусом и центром в начале координат.
помогите пожалуйста написать программу на паскале
JL25A вне форума Ответить с цитированием
Старый 23.09.2011, 16:39   #2
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

в принципе могу за 100рублей написать
или кидай свои наработки поогу советом
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 23.09.2011, 16:46   #3
JL25A
Пользователь
 
Регистрация: 06.08.2011
Сообщений: 11
По умолчанию

А за спасибо?(
Если бы мне нужно было за деньги я бы написал в другой раздел.
JL25A вне форума Ответить с цитированием
Старый 23.09.2011, 17:10   #4
JL25A
Пользователь
 
Регистрация: 06.08.2011
Сообщений: 11
По умолчанию

принципе саму программу то я напишу, я не могу понять как определить имеют или нет они общие точки, похожих тем тут не находил, так бы разобрался, мне часть программы только нужну ну или в словах, чтобы было понятно.
JL25A вне форума Ответить с цитированием
Старый 23.09.2011, 18:13   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
я не могу понять как определить имеют или нет они общие точки, похожих тем тут не находил
Разбиваем задачу на несколько простых и решаем.
Сначала на бумаге (математически), потом пишем прогграмму.

1. фигуры могут пересекаться =>есть общие точки на границе.
граница круга окружность (центр радиус).
граница прямоугольника ;4 отрезка (оординаты вершин.
пересечение окружности и каждого из отрезков. (ДАлее САМостоятельно).
2. фигуры не пересекаются и не имеют общих точек.
3. одна из фигур вложена в другую. (2 варианта).

Каждую подзадачу можно снова разбиваем на БОЛЕЕ простые.
Успехов!
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.09.2011, 20:54   #6
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от JL25A Посмотреть сообщение
... я не могу понять как определить имеют или нет они общие точки ...
1. Расстояние от точки (0,0) до прямой, проходящей через две заданные точки, - можем вычислить?..
2. Сравнить полученную величину с заданным радиусом окружности - в состоянии?..
3. Повторить два описанные выше шага максимум 4 раза - способны?..

Added 21:59 CET
Единственно, при таком подходе, случай, когда круг полностью оказался внутри прямоугольника, нужно рассматривать отдельно.

Последний раз редактировалось Vago; 23.09.2011 в 23:59.
Vago вне форума Ответить с цитированием
Старый 24.09.2011, 04:13   #7
JL25A
Пользователь
 
Регистрация: 06.08.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Vago Посмотреть сообщение
1. Расстояние от точки (0,0) до прямой, проходящей через две заданные точки, - можем вычислить?..
2. Сравнить полученную величину с заданным радиусом окружности - в состоянии?..
3. Повторить два описанные выше шага максимум 4 раза - способны?..

Added 21:59 CET
Единственно, при таком подходе, случай, когда круг полностью оказался внутри прямоугольника, нужно рассматривать отдельно.
на листке я все это смогу сделать...но в программе...
к примеру я не знаю как найти расстояние от точки (0,0) до прямой, проходящей через две заданные точки (В ПАСКАЛЕ). Все остально е вроде понятно
JL25A вне форума Ответить с цитированием
Старый 24.09.2011, 08:25   #8
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
1. фигуры могут пересекаться =>есть общие точки на границе.
evg_m, это не совсем так. В условии речь про КРУГ, а не про окружность - следовательно, внутренние точки включены. Думаю, то же самое и с прямоугольником.

Цитата:
Сообщение от JL25A Посмотреть сообщение
Нужно определить имеют ли общие точки две плоские фигуры: прямоугольник с задаными координатами вершин и круг с заданым радиусом и центром в начале координат.
помогите пожалуйста написать программу на паскале
Прямоугольник какой? Его стороны параллельны осям координат или могут быть наклонены? Далее все в предположении, что стороны параллельны координатам.

Прямоугольник задается двумя (диагонально противоположными) вершинами:
x1,y1 и x2,y2
Круг задан центром и радиусом:
x0,y0 и r



На картинке видны все главные типы пересечения (надеюсь, я ничего не забыл). Красными звездами помечены реперные точки (то есть те, которые надо проверять. То есть надо сделать две вещи:
1. проверить вершины прямоугольника на принадлежность кругу;
2. проверить крайние точки круга (по x и y) на принадлежность прямоугольнику.

Короче, как-то так примерно (не проверял).
Код:
var
  x0,y0,x1,y1,x2,y2,r: double;

function InCirc(x,y: double): boolean;
begin
  InCirc:= Sqr(x-x0) + Sqr(y-y0) <= r*r    // corrected
end;

function InRect(x,y: double): boolean;
begin
  InRect:= ((x-x1)*(x-x2) <=0 ) and ((y-y1)*(y-y2) <= 0)
end;

begin
  // тут ввод параметров фигур
  Writeln(
    'Фигуры пересекаются? ',
    InCirc(x1,y1) or InCirc(x1,y2) or InCirc(x2,y1) or InCirc(x2,y2) or
    InRect(x0-r,y0) or InRect(x0+r,y0) or InRect(x0,y0-r) or InRect(x0,y0+r)
  );
  Readln
end.
Если же прямоугольник все же наклонный, то нужно сначала сделать поворот системы координат, а потом решать, как сделано выше.
Изображения
Тип файла: jpg circule_and_rectangle.jpg (13.3 Кб, 202 просмотров)
Предпочитаю на "ты".

Последний раз редактировалось TinMan; 25.09.2011 в 02:24. Причина: опечатка
TinMan вне форума Ответить с цитированием
Старый 24.09.2011, 15:50   #9
JL25A
Пользователь
 
Регистрация: 06.08.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Прямоугольник задается двумя (диагонально противоположными) вершинами:
x1,y1 и x2,y2
Круг задан центром и радиусом:
x0,y0 и r

Код:
var
  x0,y0,x1,y1,x2,y2,r: double;

function InCirc(x,y: double): boolean;
begin
  InCirc:= Sqr(x-x0) + Sqr(y-y0) >= r*r
end;

function InRect(x,y: double): boolean;
begin
  InRect:= ((x-x1)*(x-x2) <=0 ) and ((y-y1)*(y-y2) <= 0)
end;

begin
  // тут ввод параметров фигур
  Writeln(
    'Фигуры пересекаются? ',
    InCirc(x1,y1) or InCirc(x1,y2) or InCirc(x2,y1) or InCirc(x2,y2) or
    InRect(x0-r,y0) or InRect(x0+r,y0) or InRect(x0,y0-r) or InRect(x0,y0+r)
  );
  Readln
end.
Спасибо за помощь но:
При вводе всех значений все время выдает true, найти ошибку в коде почему то не смог, поэтому если будет время посмотрите.
Код:
var
  x0,y0,x1,y1,x2,y2,r: double;
  
function InCirc(x,y: double): boolean;
begin
  InCirc:= Sqr(x-x0) + Sqr(y-y0) >= r*r
end;

function InRect(x,y: double): boolean;
begin
  InRect:= ((x-x1)*(x-x2) <=0 ) and ((y-y1)*(y-y2) <= 0)
end;

begin
  writeln('Введите координаты 2-х вершин прямоугольника (диагонально противоположных)');
  write('1-я вершина прямоугольника (x y): ');readln(x1,y1);
  write('2-я вершина прямоугольника (x y): ');readln(x2,y2);
  write('Введите координаты центра окружности в начале координат (0 0): ');readln(x0,y0);
  write('Введите радиус круга: '); readln(r);
    writeln('Фигуры пересекаются? ',
    InCirc(x1,y1) or InCirc(x1,y2) or InCirc(x2,y1) or InCirc(x2,y2) or
    InRect(x0-r,y0) or InRect(x0+r,y0) or InRect(x0,y0-r) or InRect(x0,y0+r)
  );
  Readln
end.
JL25A вне форума Ответить с цитированием
Старый 25.09.2011, 02:12   #10
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Я перепутал знак неравенства в функции InCirc. Исправь.

Ты не понял что ли принцип? Учти, я пишу в расчете на то, что ты разберешься. Такую простую ошибку мог бы и сам найти..
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#.Определить функцию, которая выясняет, пересекаются ли две фигуры Tomogochi Общие вопросы .NET 12 26.10.2015 00:30
определить общие символы двух строк helena91 Общие вопросы Delphi 5 23.02.2011 02:00
Определить вид фигуры straiker9 Паскаль, Turbo Pascal, PascalABC.NET 1 07.04.2010 07:48
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Определить, сколько учеников класса не имеют отметок ниже четырех HOOKER Помощь студентам 6 08.10.2008 19:50