1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| Liba |
Сообщение
#1
|
|
Гость |
Помогите решить 2 задачки.....очень надо....
1)Есть 3 окружности разных диаметров с разными центрами.Нужной найти все точки пересечения окружностей. 2)На плоскости хаотично расположены точки(n) нужно посторить минимальный многоугольник(не треугольник).Вывести результат координат и кол-во точек многоугольника. Заранее огромное спасибо!!!!! P.S.Я вообще не понимаю как это надо делать.... :p2: |
![]() ![]() |
| volvo |
Сообщение
#2
|
|
Гость |
Насколько я помню, в общем случае первая задача решается так:
Код Type TPoint = Record x, y: Double; End; TCircle = Record x, y, r: Double; End; Const Epsilon = 0.001; n = 3; { координаты заданы для тестирования } arrCircles: Array[1 .. n] Of TCircle = ((x:- 5; y:4; r:4), (x:- 6; y:4; r:1), (x:-10; y:8; r:3) ); Var amount: Integer; { здесь хранятся координаты точек пересечения } InterPoint: Array[1 .. 2*n] Of TPoint; Function CircleIntersect( cr1, cr2: TCircle ): Integer; Var p1, p2: TPoint; q, a, b, c, D: Double; Dist: Double; Begin Dist := Sqrt( Sqr(cr2.x - cr1.x) + Sqr(cr2.y - cr1.y)); cr2.x := cr2.x - cr1.x; cr2.y := cr2.y - cr1.y; CircleIntersect := 0; If (Abs(Dist) < Epsilon) or (Dist > cr1.r + cr2.r) or (Dist < Abs(cr1.r - cr2.r)) Then Exit; CircleIntersect := 1; If Abs(Dist - (cr1.r + cr2.r)) < Epsilon Then Begin p1.x := (cr2.x * cr1.r) / Dist; p1.y := (cr2.y * cr1.r) / Dist; p1.y := p1.y + cr1.y; p1.x := p1.x + cr1.x; Inc(Amount); InterPoint[Amount] := p1; Exit End; If cr2.x = 0 Then Begin p1.y := (Sqr(cr2.y) + Sqr(cr1.r) - Sqr(cr2.r)) / (2 * cr2.y); p1.x := Sqrt(Sqr(cr1.r) - Sqr(p1.y)); p2.x := -p1.x; p2.y := p1.y; End Else Begin q := Sqr(cr1.r) - Sqr(cr2.r) + Sqr(cr2.x) + Sqr(cr2.y); a := 4 * (Sqr(cr2.y) + Sqr(cr2.x)); b := (-4) * cr2.y * q; c := Sqr(q) - 4 * Sqr(cr1.r) * Sqr(cr2.x); D := Sqr(b) - 4 * a * c; p1.y := ((-b + Sqrt(D))/(2*a)); p2.y := ((-b - Sqrt(D))/(2*a)); p1.x := ((Sqr(cr1.r) - Sqr(cr2.r) + Sqr(cr2.x) + Sqr(cr2.y) - 2*cr2.y*p1.y) / (2*cr2.x)); p2.x := ((Sqr(cr1.r) - Sqr(cr2.r) + Sqr(cr2.x) + Sqr(cr2.y) - 2*cr2.y*p2.y) / (2*cr2.x)); End; p1.y := p1.y + cr1.y; p2.y := p2.y + cr1.y; p1.x := p1.x + cr1.x; p2.x := p2.x + cr1.x; Inc(Amount); InterPoint[Amount] := p1; Inc(Amount); InterPoint[Amount] := p2; CircleIntersect := 2 End; Var i, j: Integer; Begin For i := 1 To n Do Begin WriteLn( 'Окружность #', i ); Write( 'X центра>' ); ReadLn(arrCircles[i].x); Write( 'Y центра>' ); ReadLn(arrCircles[i].y); Write( 'Радиус>' ); ReadLn(arrCircles[i].r); End; Amount := 0; For i := 1 To n Do For j := Succ(i) To n Do CircleIntersect(arrCircles[i], arrcircles[j]); WriteLn( 'Найдено точек:', Amount ); For i := 1 To Amount Do WriteLn( 'точка #', i, ': x = ', interpoint[i].x:7:3, ' y = ', interpoint[i].y:7:3 ) End. Можно еще добавить проверку на совпадающие точки ... :p2: Сообщение отредактировано: volvo - |
Liba Задачи по аналитической геометрии. 27.10.2004 23:57
Digitalator задача1
Ты что, математику не знаешь???????
зада… 28.10.2004 6:04
xds Предсказываю: имеется в виду выпуклый многоугольни… 28.10.2004 7:03
Altair Между прочим, первую задачу, решит не каждый, если… 28.10.2004 10:50
Liba Спасибо!!!
А почему когда я ее запуска… 28.10.2004 21:36
volvo :(
Только что прогнал программу в Дельфи -
pro… 28.10.2004 22:00
Liba
Совершенно точно ты предугодал.... 30.10.2004 14:28
Guest Неучто никто не знает как сделать 2 задачку???? :( 12.11.2004 2:59
Altair
А что значит минимальный?
по какому параметру он … 12.11.2004 11:23
Guest да
имеется в виду выпуклый многоугольник минималь… 12.11.2004 13:32
Guest Ну кто-нибудь решите программку???пожалуйста :p2: 19.11.2004 3:57
Liba Думаю я повтрарю задание....... ;)
На плоскост… 19.11.2004 4:29
volvo Liba
Алгоритм описан здесь 19.11.2004 4:53
Liba Алгоритм алгоритмом.........а написать программу я… 19.11.2004 11:15
Altair АУ!
Там есть блок схема!
скачайте редактор… 19.11.2004 11:27
Liba ОГРОМНЕЙШЕЕ СПАСИбО!!!!!!… 24.11.2004 1:19![]() ![]() |
|
Текстовая версия | 24.12.2025 9:42 |