Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

nDuD

ИНФОРМАТИКА ! НИД ХЕЛП!!11

Рекомендованные сообщения

в общем задали проект на два месяца я его уже оформил тока задачу надо решить !

ХЕЛП ХЕЛП ХЕЛП  :pray: :pray:

 

В ПАСКАЛЕ ! :

 

Из заданного множества точек на плоскости выбрать 3 различные так, чтобы внутри треугольника содержалось максимальное количество точек этого множества.

 

если кто сможет с меня симпа!

Поделиться сообщением


Ссылка на сообщение

три самые крайние

Поделиться сообщением


Ссылка на сообщение

я рад но мне нужно решение  в паскале  :ohmy:

Поделиться сообщением


Ссылка на сообщение

но только самые крайние бери

 

з.ы. я думаю тут не в "закодить" загвоздка, на первый взгляд: проводишь прямую через каждые две точки и смотришь, чтоб все остальные были "по одну сторону от прямой", так ты попарно найдешь "крайние" точки... а дальше из них уже выбирать, опять же брать по три, строить прямые и перебором

 

это то что пришло в голову первое, НО это стоооооооооолько переборов... если там точек не так уж много, то мб покатит=\

 

бляяяя все выше написанное для выпуклого множества... или конкретизируй задачу или простой огромный перебор


Короче хочешь оставаться ограниченным - можешь меня не слушать и считать, что ты прав. Я вообще много могу интересного о музыке рассказать, если кто готов слушать. Я знаю наверняка где я прав, и знаю наверняка, где я смогу доказать свою правоту, а где не стоит даже и пытаться.

HAIL VODKA DRINK PUTIN

Поделиться сообщением


Ссылка на сообщение

чо конкретизировать она такая  и есть :о

 

Поделиться сообщением


Ссылка на сообщение

ну множество может быть наперед сказано, что выпуклое, может быть там 1кккк точек и простой переор никак не поможет и будет работать 100 дней, пока даст ответ... закодить это вообще не проблема, думаю важен алгоритм...


Короче хочешь оставаться ограниченным - можешь меня не слушать и считать, что ты прав. Я вообще много могу интересного о музыке рассказать, если кто готов слушать. Я знаю наверняка где я прав, и знаю наверняка, где я смогу доказать свою правоту, а где не стоит даже и пытаться.

HAIL VODKA DRINK PUTIN

Поделиться сообщением


Ссылка на сообщение

не знаю я не шарю в этом :О

но условие оно 100% такое

Поделиться сообщением


Ссылка на сообщение

суммон Сноб


`*´¨) 4xan4

¸.•´¸.•*´¨)¸.•*´)

(¸.•´ (¸.•` ¤...Prodota...¤

Поделиться сообщением


Ссылка на сообщение

з.ы. я думаю тут не в "закодить" загвоздка, на первый взгляд: проводишь прямую через каждые две точки и смотришь, чтоб все остальные были "по одну сторону от прямой", так ты попарно найдешь "крайние" точки... а дальше из них уже выбирать, опять же брать по три, строить прямые и перебором

эти 3 точки не обязательно будут "крайними". а по сабжу перебор ибашит, просто надо придумать некоторое ограничение например перебирать так чтобы у следующего треугольника основание было таким же и оно содержало предыдущий.


:nate: :nate: :nate: если вы поймаете взглядом момент когда они няшатся синхронно, это к счастью

Поделиться сообщением


Ссылка на сообщение

находим центр системы, хз как, видимо надо просто все векторы перемножить.

 

от этого центра ищем крайние точки окружностями

 

ну вот и треугольник

 

скажи хоть специальность, потому что задача похожа на физическую, чтонить связанное с массами.

Поделиться сообщением


Ссылка на сообщение

^ неправ


:nate: :nate: :nate: если вы поймаете взглядом момент когда они няшатся синхронно, это к счастью

Поделиться сообщением


Ссылка на сообщение

дщд

тут чо за хуевые программеры?

у тебя есть 2 точки (х,у), составляешь прямую, и ставишь условие, чтобы точки были под прямой!


bugurtmeister -  ЛОХ ПИДР ДОЛБОЕБ, А ТЫ КТО ?  СКОКО У ТИБЯ ИЛО И СКОКО ХУЕВ ТЫ СОСАЛ ДОМА ПОКА Я БЫЛ НА ИЕМЕ ?  Я ТЕБЕ НАБЬЮ ЕБАЛЬНИК

ОСЕНЬ ДАЛБАЕБ ПИДАРАС ЛОХ ПОЦ

Поделиться сообщением


Ссылка на сообщение

сразу говорю что я пас в паскале шарю на уровне ну совсем несложных задач потому и прошу решение в паскале а не идею решения =\

Поделиться сообщением


Ссылка на сообщение

сразу говорю что я пас в паскале шарю на уровне ну совсем несложных задач потому и прошу решение в паскале а не идею решения =\

Как можно просить решение, если и идеи-то нет. Самая тупая, но точно верная идея это составить список всех возможных треугольников, а потом посмотреть в какой сколько точек попало. Для других решений нужно теоретическое обоснование которое с программированием не сильно связано, скорее с аналитической геометрией.


Приду и молча поправлю всё.

gryzlov_idol_post.png

 

 

pdsig-3.png

Поделиться сообщением


Ссылка на сообщение

сразу говорю что я пас в паскале шарю на уровне ну совсем несложных задач потому и прошу решение в паскале а не идею решения =\

Как можно просить решение, если и идеи-то нет. Самая тупая, но точно верная идея это составить список всех возможных треугольников, а потом посмотреть в какой сколько точек попало. Для других решений нужно теоретическое обоснование которое с программированием не сильно связано, скорее с аналитической геометрией.

ну я и прошу придумать как это решать и реализовать :(

 

Поделиться сообщением


Ссылка на сообщение

Я в паскале не шарю, когда я учился, я сразу попросил препода разрешить мне писать на C/C++ ибо я его тогда уже знал, он был не против.


Приду и молча поправлю всё.

gryzlov_idol_post.png

 

 

pdsig-3.png

Поделиться сообщением


Ссылка на сообщение

я бы помог , но учусь в 8 классе  :ohpalevo:


:buba:

Поделиться сообщением


Ссылка на сообщение

Нашел на каком то сайте

паскаль офк не знаю, но там вроде все таки боле менее ясно, простой перебор без математики.

 

 

Const

  LEFT = 1;

  RIGHT = 2;

  BEYOND = 3;

  BEHIND = 4;

  BETWEEN = 5;

  ORIGIN = 6;

  DESTINATION = 7;

 

Type

  TPoint = Record

    x : Real;

    y : Real;

  end;

 

  TVector = TPoint;

 

  TTriangle = Record

    A, B, C : TPoint;

  end;

 

Function VectorLength (v : TVector) : Real;

begin

  VectorLength := sqrt (sqr (v.x) + sqr (v.y));

end;

 

Function Classify (a : TPoint; b : TPoint; p : TPoint) : Byte;

var

  sa : Real;

  v1 : TVector;

  v2 : TVector;

 

begin

  v1.x := b.x - a.x;

  v1.y := b.y - a.y;

  v2.x := p.x - a.x;

  v2.y := p.y - a.y;

 

  sa := v1.x*v2.y - v1.y*v2.x;

 

  if sa > 0 then Classify := LEFT

  else if sa < 0 then Classify := RIGHT

  else if (v1.x*v2.x < 0) or (v1.y*v2*y < 0) then Classify := BEHIND

  else if (VectorLength (v1) < VectorLength (v2)) then Classify := BEYOND

  else if a = p then Classify := ORIGIN

  else if b = p then Classify := DESTINATION

  else Classify := BETWEEN;

end;

 

Function PointInTriangle (t : TTriangle; p : TPoint);

begin

  PointInTriangle := (Classify (t.A, t.B, p) <> LEFT) and (Classify (t.B, t.C, p) <> LEFT) and (Classify (t.C, t.A, p) <> LEFT);

end;

 

{ ============================== }

кусок программы

 

Const

  Nmax = 10000;

 

Type

  TPoints = array [1..Nmax] of TPoint;

 

Var

  p : TPoints;

  t : TTriangle;

  n : Word;  { кол-во реальных точек }

 

{ описание остальных переменных }

...

 

Begin

  { Инициализация, ввод данных }

  ...

  nMaxPoints := 0;

  { перебор всех троек точек }

  for i := 1 to n - 2 do

    for j := i + 1 to n - 1 do

      for k := j + 1 to n do

      begin

         t.A := p ;

         t.B := p [j];

         t.C := p [k];

 

         { проверяем все точки }

         nCount := 0;

         for m := 1 to n do

           if PointInTriangle (t, p [m]) then Inc (nCount);

 

         if nCount > nMaxPoints then begin

           nMaxPoints := nCount;

           maxTriangle := t;

         end;

  end;

 

  { Вывод результата }

  ...

End.

 

 

 

Там еще камент

 

Ну и в чем проблема?

Определить, находится ли точка внутри треугольника, можно несколькими способами (везде треугольник будет обозначаться ABC, проверяемая точка - M):

 

1. Площадь треугольника ABC равна сумме площадей треугольников ABM, ACM и BCM. Решение строго математическое, но для компа, ИМХО, не годится, т.к. возможны проблемы с округлением. Простая формула для определения площади треугольника по координатам вершин выглядит так: S = 1/2 * [a, b], где a и b - вектора смежных сторон из общей точки, [a, b] - векторное произведение векторов a и b. Для треугольника ABC с координатами ((Xa, Ya), (Xb, Yb), (Xc, Yc)) площадь определяется так: S = 0.5 * ((Xb-Xa)*(Yc-Ya) - (Xc-Xa)*(Yb-Ya)).

 

2. Для точки M внутри треугольника ABC сумма углов при вершине M треугольников ABM, ACM и BCM равна 360 градусов (2*пи). Косинус угла определяется как скалярное произведение векторов, исходящих из этой точки, разделенное на произведение длин этих векторов. Способ не очень хороший, т.к. помимо округлений требует большого количества вычислений.

 

3. Функция Classify в приложении определяет положение заданной точки относительно заданного отрезка (вектора). Вектор разделяет плоскость на 7 непересекающихся областей (см. http://www.kamlit.ru/docs/aloritms/algolist.manual.ru/maths/geom/datastruct.php.htm), и данная функция сообщает, какой из этих областей принадлежит точка.

Функция основана на свойствах векторного произведения векторов.

 

Используя данную функцию можно определить принадлежность точки треугольнику с помощью 3-х проверок (см. функцию PointInTriangle в приложении).

 

 

:palevojein:

 

 

Класс вроде целиком приведен, если вдруг не заработает, то этот класс автор явно спиздил с сайта algolist.ru, там он есть целиком

 

Поделиться сообщением


Ссылка на сообщение

это че воще  :palevo: :palevo: :palevo:  :ispug:

думаю мне бы такое не задали + в паскале мне выдает ошибку : операнды имеют неприводимые типы

 

я так понимаю там ввести их надо ... но я даже боюсь в этом разбираться

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

×
×
  • Создать...