![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Reflex |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 118 Пол: Женский Репутация: ![]() ![]() ![]() |
Нуно сделать прогу, которая по двух отрезках находила их пересечение. Искала, но ни одна программа не работает
![]() -------------------- Нам не дано предугадать как наше слово отзовется...
|
![]() ![]() |
Tan |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
в смысле ты задаёшь координаты двух отрезков и тебе надо найти точку их пересечения ?
-------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
Reflex |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 118 Пол: Женский Репутация: ![]() ![]() ![]() |
да
-------------------- Нам не дано предугадать как наше слово отзовется...
|
Tan |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
У тебя есть 2 точки отрезка, следовательно ты можешь составить уравнение линии которой принадлежит отрезок, находишь уравнения для 2х линий, приравниваешь уравнения и находишь точку их пересечения, после этого проверяешь принадлежит ли эта точка обоим отрезкам на их интервале.
-------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
Reflex |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 118 Пол: Женский Репутация: ![]() ![]() ![]() |
такой код очень муторный и долгий
![]() -------------------- Нам не дано предугадать как наше слово отзовется...
|
Perfez |
![]() ![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Модераторы Сообщений: 231 Пол: Женский Репутация: ![]() ![]() ![]() |
|
Reflex |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 118 Пол: Женский Репутация: ![]() ![]() ![]() |
Не работает
![]() 1 0 2 0 1 0 3 0 и я так поняла, что она не показывает мн-во пересечений(координаты точки или отрезка) помогите, очень нужно -------------------- Нам не дано предугадать как наше слово отзовется...
|
Perfez |
![]() ![]()
Сообщение
#8
|
![]() Бывалый ![]() ![]() ![]() Группа: Модераторы Сообщений: 231 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата что она не показывает мн-во пересечений(координаты точки или отрезка) Разве две прямые линии могут пересекаться в двух разных точках? ![]() ![]() |
Lapp |
![]()
Сообщение
#9
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Отведай мою стряпню..
![]() type Добавлено через 3 мин. Эта процедура выдаст ошибку, если отрезок расположен вдоль у. Но этот случай гораздо проще, и его можно рассмотреть отдельно. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Эта процедура выдаст ошибку, если отрезок расположен вдоль у. Не только... Эта процедура выдаст ошибку ВСЕГДА, когда отрезки только касаются друг друга, но не пересекаются:with L1 do beginрезультат: (k1 = k2), divizion by zero Сообщение отредактировано: volvo - 17.04.2007 10:11 |
Lapp |
![]()
Сообщение
#11
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Эта процедура выдаст ошибку ВСЕГДА, когда отрезки только касаются друг друга, но не пересекаются: ... результат: (k1 = k2), divizion by zero Не совсем понял, при чем здесь касание... k1=k2 означает параллельность прямых, что естественно, тоже особый случай. В любом случае - volvo, спасибо за исправление. 2 reflex: Да, нужно проверять также на параллельность, то есть равенство k1 и k2. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Reflex |
![]()
Сообщение
#12
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 118 Пол: Женский Репутация: ![]() ![]() ![]() |
Код type point = record x, y: real; end; procedure min(var point11,point12:point); var tmp : point; begin if (point11.x<point12.x) or (point11.y<point12.y) then exit; tmp:=point11; point11:=point12; point12:=tmp; end; function inside(p1,p2,p3:point):boolean; begin inside:=false; if p1.y=p2.y then begin if (p1.x<=p3.x) and (p2.x<=p1.x) then inside:=true; end else if (p1.y<=p3.y) and (p2.y<=p1.y) then inside:=true; end; function conect(point11, point12, point21, point22: point;var pretpoint: point): boolean; var d, d1, d2, t1, t2: real; p1,p2:point; var f : boolean; comp : real; const epsilon = 10E-4; begin conect := false; f:=false; d := (point12.y - point11.y)*(point21.x - point22.x) - (point21.y - point22.y)*(point12.x - point11.x); if abs(d) < epsilon then begin comp:=abs(abs((point12.x-point11.x)*(point21.x-point11.x) +(point12.y-point11.y)*(point21.y-point11.y)) -sqrt(sqr(point12.x-point11.x)+sqr(point11.y-point12.y)) *sqrt(sqr(point21.x-point11.x)+sqr(point11.y-point21.y))); { writeln(comp:0:6);} if comp<epsilon then begin if point11.y=point12.y then begin if (point11.x<=point21.x) and (point12.x>=point21.x) then begin if (point11.x<=point22.x) and (point12.x>=point22.x) then begin p1.x:=point21.x; p1.y:=point21.y; p2.x:=point22.x; p2.y:=point22.y; f:=true; conect:=true; end else begin p1.x:=point21.x; p1.y:=point21.y; p2.x:=point12.x; p2.y:=point12.y; f:=true; conect:=true; end; end else if (point11.x<=point22.x) and (point12.x>=point22.x) then begin p1.x:=point22.x; p1.y:=point22.y; p2.x:=point11.x; p2.y:=point11.y; f:=true; conect:=true; end else begin p1.x:=point11.x; p1.y:=point11.y; p2.x:=point12.x; p2.y:=point12.y; f:=true; conect:=true; end; end else if (point11.y<=point21.y) and (point12.y>=point21.y) then begin if (point11.y<=point22.y) and (point12.y>=point22.y) then begin p1.x:=point21.x; p1.y:=point21.y; p2.x:=point22.x; p2.y:=point22.y; f:=true; conect:=true; end else begin p1.x:=point21.x; p1.y:=point21.y; p2.x:=point12.x; p2.y:=point12.y; f:=true; conect:=true; end; end else if (point11.y<=point22.y) and (point12.y>=point22.y) then begin p1.x:=point22.x; p1.y:=point22.y; p2.x:=point11.x; p2.y:=point11.y; f:=true; conect:=true; end else begin p1.x:=point11.x; p1.y:=point11.y; p2.x:=point12.x; p2.y:=point12.y; f:=true; conect:=true; end end; if f then if (p1.x<>p2.x) or (p1.y<>p2.y) then begin write(p1.x:0:6,' ',p1.y:0:6,' ',p2.x:0:6,' ',p2.y:0:6) end else begin write(p1.x:0:6,' ',p1.y:0:6); end else begin if (point11.x=point21.x) and (point11.y=point21.y) then begin writeln(point11.x:0:6,' ',point11.y:0:6); conect:=true; exit; end else if (point11.x=point22.x) and (point11.y=point22.y) then begin writeln(point11.x:0:6,' ',point11.y:0:6); conect:=true; exit; end else if (point12.x=point21.x) and (point12.y=point21.y) then begin writeln(point12.x:0:6,' ',point12.y:0:6); conect:=true; exit; end else if (point12.x=point22.x) and (point12.y=point22.y) then begin writeln(point12.x:0:6,' ',point12.y:0:6); conect:=true; exit; end; end; exit; end; d1 := (point12.y-point11.y)*(point21.x-point11.x)-(point21.y-point11.y)*(point12.x-point11.x); d2 := (point21.y-point11.y)*(point21.x-point22.x)-(point21.y-point22.y)*(point21.x-point11.x); t1:=d1/d; t2:=d2/d; if not ((t1<=1)and(t1>=0)and(t2>=0)and(t2<=1)) then begin exit; end; write(point11.x+(point12.x-point11.x)*t2:0:6,' ',point11.y+(point12.y-point11.y)*t2:0:6); { pretpoint.x := point11.x+(point12.x-point11.x)*t2; pretpoint.y := point11.y+(point12.y-point11.y)*t2;} conect := true end; var res,p1,p2,p3,p4: point; begin read(p1.x,p1.y,p2.x,p2.y,p3.x,p3.y,p4.x,p4.y); min(p1,p2); min(p3,p4); if conect(p1, p2, p3, p4, res) then else writeln('Empty'); end. помогите найти ошибку. -------------------- Нам не дано предугадать как наше слово отзовется...
|
Lapp |
![]()
Сообщение
#13
|
|||
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
помогите найти ошибку. Легко. Твоя ошибка уже в том, что ты не указала, в чем она состоит. А желающим помочь самим догадываться, что должна делать программа, что она вводит в начальных данных (даже нет приглашений на ввод!!), где и как проявляется ошибка... Во всем тексте ни одного комментария!
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
|||
![]() ![]() |
![]() |
Текстовая версия | 24.06.2025 22:18 |