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

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

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

 
 Ответить  Открыть новую тему 
> линия проходящая через точки, разделить точки поровну
Bard
сообщение 26.04.2007 18:40
Сообщение #1


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

Репутация: -  3  +


даны координаты N точек. найти такие две из них чтобы остальные точки располагались в разных сторонах отрезка(поровну) проходящего через эти две точки...
например если N=6 то вправо от отрезка лежат 2 точки и влево также...
помогите пожалуйста с реализацией алгоритма lol.gif или подайте идею... blum.gif


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Sto
сообщение 26.04.2007 20:47
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 70
Пол: Мужской
Реальное имя: Илья

Репутация: -  2  +


А если будет непарное количество точек??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 26.04.2007 20:48
Сообщение #3


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


1. По разные стороны отрезка? Может, все-таки прямой?
2. Наверное, в точной формулировке не "поровну", а "чтобы разница была минимальной"? (при N=7, например, поровну не получится).
У меня есть дельфийская реализация.
Изменения коснутся только рисования... Ты же просил идеи по алгоритмам... так что выкладываю.

типы данных, которые нам потребуются:
type
TPoint=record
x,y:integer;
end;
TLine=record
A,B,C:real;
end;
TPointSet=array [1..50] of TPoint;


глобальные переменные:
var i,j,Dif,MinDif,OnLineCurrent,Point1,Point2:integer;
P1,P2: TPoint;
L: TLine;
S:TPointSet;


вспомогательные подпрограммы:

procedure InitLine(var L: TLine; pA,pB: TPoint);
begin
L.A:=pB.y-pA.y;
L.B:=pA.x-pB.x;
L.C:=pA.y*(pB.x-pA.x)-pA.x*(pB.y-pA.y);
end;

function SignPoint(L:TLine;P:TPoint):integer;
var r:real;
begin
r:=L.A*P.x+L.B*P.y+L.C;
if abs®<=0.001 then
SignPoint:=0
else
if r<0 then
SignPoint:=-1
else
SignPoint:=1;
end;

function Difference (L:TLine;S:TPointSet;var OnLineCurrent: integer):integer;
var D,i,Temp:byte;
begin
D:=0;
OnLineCurrent:=0;
for i:=1 to 20 do
begin
Temp:=SignPoint(L,S[i]);
D:=D+Temp;
if Temp=0 then
OnLineCurrent:=OnLineCurrent+1;
end;
Difference:=abs(D);
end;



Основная часть программы (вот в нее тебе придется вносить изменения).
begin
randomize;
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Rectangle(0,0,700,700);
for i:=1 to 20 do
begin
S[i].x:=random(350);
S[i].y:=random(300);
Image1.Canvas.Pen.Color:=clBlack;
Image1.Canvas.Brush.Color:=clRed;
Image1.Canvas.Ellipse(S[i].x-2,S[i].y-2,S[i].x+2,S[i].y+2);
end;
for i:=1 to 19 do
begin
if MinDif=0 then break;
for j:=i+1 to 20 do
begin
if MinDif=0 then break;
InitLine(L,S[i],S[j]);
Dif:=Difference(L,S,OnLineCurrent);
if MinDif>Dif then
begin
MinDif:=Dif;
Point1:=i;
Point2:=j;
end;
end;
end;
with Image1.Canvas do
begin
Pen.Color:=clRed;
MoveTo(S[Point1].x,S[Point1].y);
LineTo(S[Point2].x,S[Point2].y);
end;
end;

end.


Будут вопросы - пиши, постараюсь вспомнить, чем я руководствовалась при написании.... (поленилась тогда комментарии написать, все очевидным казалось).


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Bard
сообщение 27.04.2007 7:13
Сообщение #4


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

Репутация: -  3  +


если честно я ничего не понял в твоей программе nea.gif ...я же не хотел графику wacko.gif ...в графике делфи я не разбираюсь good.gif ... if не трудно объясни что твоя прога делает blum.gif


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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