Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Вниз

Алгоритм?   Найти похожие ветки 

 
Добрый)   (2008-12-30 14:39) [0]

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


 
Добрый)   (2008-12-30 14:40) [1]

P.S.
Желательно все это реализовать на C++, но если вы подскажите как это сделать на Delphi, то я переведу на сишку


 
Palladin ©   (2008-12-30 14:46) [2]

точка пользователя x,y
находим самую верхнюю вершину полигона (звезды в твоем случае) xt,yt
считаем количество ребер пересекающихся с отрезком x,y,x,yt
если четное - точка не принадлежит полигону, иначе - принадлежит


 
DVM ©   (2008-12-30 14:48) [3]

CreatePolygonRgn() + PtInRegion()

Или так (сделано для вещественных чисел, но переделать под целые не проблема):

type

 TDoublePoint = record
   x: Double;
   y: Double;
 end;
 PDoublePoint = ^TDoublePoint;

 TDPointArray = array of TDoublePoint;

function PtInPolygon(const Pts: TDPointArray; P: TDoublePoint): Boolean;
var
 Cnt, I, J: Integer;
begin
 Result := False;

 Cnt := Length(Pts);
 J := Cnt-1;

 for I := 0 to Cnt-1 do
 begin
   if ((Pts[I].y <= P.y) and (P.y < Pts[J].y)) or
     ((Pts[J].y <= P.y) and (P.y < Pts[I].y)) then
   begin
     if (P.x < (Pts[J].x - Pts[I].x) * (P.y - Pts[I].y) /
       (Pts[J].y - Pts[I].y) + Pts[I].x) then
       Result := not Result;
   end;

   J := I;
 end;
end;


 
Сергей М. ©   (2008-12-30 14:50) [4]


> как решить такую задачку


"Конец" у звезды - это где ?
Это вершина ее луча что ли ?
Тогда никак.
Полигон однозначно определяется координатами всех его вершин, а не только "концов".
Пятиконечная зведа - невыпуклый полигон с 10-ю вершинами, из которых, если считать "концами" лучи, определены только 5.


 
clickmaker ©   (2008-12-30 14:59) [5]

> "Конец" у звезды - это где ?

а у морской звезды есть конец?


 
charoey_mag   (2008-12-30 15:01) [6]


> определены только 5.

Остальные 5 легко расчитываются, так как они находятся на пересечении соответствующих отрезков. И определять принадлежность точки можно не сразу по звезде, а по 4 треугольникам плучющимся при ее построении, что есть уже достаточно тривиальная задача...


 
Сергей М. ©   (2008-12-30 15:02) [7]


> у морской звезды есть конец?


Лучи точно есть - сам видел)
А конца у м.з. может и не быть)


 
DVM ©   (2008-12-30 15:05) [8]

Через 5 точек можно провести бесконечно много пятиконечных звезд


 
Сергей М. ©   (2008-12-30 15:06) [9]


> они находятся на пересечении соответствующих отрезков


Вовсе не обязательно.
И по условию это, кстати, не оговаривается, так что звезда м.б. любой.


 
charoey_mag   (2008-12-30 15:11) [10]


> Через 5 точек можно провести бесконечно много пятиконечных
> звезд

Может сегодня 30 и я уже не соображаю, но подскажите как? у меня кроме одной не получается, все остальное, плоской геометрической пятиконечной звездой назвать никак нельзя


 
Сергей М. ©   (2008-12-30 15:13) [11]


> charoey_mag


Пятиконечных звезд разных - как в Бразилии Педров.

http://ru.wikipedia.org/wiki/%D0%97%D0%B2%D0%B5%D0%B7%D0%B4%D0%B0_(%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F)

Ты о какой ?


 
charoey_mag   (2008-12-30 15:15) [12]

http://ru.wikipedia.org/wiki/Звезда_(геометрия)

Звезда — плоская геометрическая фигура, составленная из треугольных лучей, исходящих из общего центра, сливающихся в точке схождения.

ВОТ об этой


 
DVM ©   (2008-12-30 15:21) [13]


> charoey_mag

вот звезда

http://images.yandex.ru/yandsearch?p=31&ed=1&text=%D0%BF%D1%8F%D1%82%D0%B8%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D0%B0%D1%8F%20%D0%B7%D0%B2%D0%B5%D0%B7%D0%B4%D0%B0&spsite=gym6.narod.ru&img_url=tmn.fio.ru%2Fworks%2F90x%2F304%2Fimages%2F004a.jpg&rpt=simage

и вот звезда

http://images.yandex.ru/yandsearch?p=25&ed=1&text=%D0%BF%D1%8F%D1%82%D0%B8%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D0%B0%D1%8F%20%D0%B7%D0%B2%D0%B5%D0%B7%D0%B4%D0%B0&spsite=antipunk.org&img_url=daket.ru%2Falbums%2Fuserpics%2F10001%2F2522168.jpg&rpt=simage

они разные, но внешние вершины вполне можно совместить


 
Сергей М. ©   (2008-12-30 15:21) [14]

А чем это не звезда ?
http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Marshal_star_rod.jpg


 
charoey_mag   (2008-12-30 15:22) [15]

Поэтому единственное что надо проверить(если надо и не указано условием) это то что 5 точек образуют выпуклый пятиугольник


 
charoey_mag   (2008-12-30 15:22) [16]

Поэтому единственное что надо проверить(если надо и не указано условием) это то что 5 точек образуют выпуклый пятиугольник, иначе звезда не получится


 
DVM ©   (2008-12-30 15:22) [17]


> charoey_mag

внутренние углы могут быть разные


 
Сергей М. ©   (2008-12-30 15:25) [18]


> charoey_mag


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


 
charoey_mag   (2008-12-30 15:27) [19]

Я может че не догоняю, но что особенного во всех ваших выше приведенных звездах


 
charoey_mag   (2008-12-30 15:31) [20]

Оп, все понял. вы имееие ввиду что внутренние углы могут не лежать на пересечениях отрезков.
Тогда да в задаче мало сведений, хотя видимо все таки считается что внутренние углы лежат на пересечении


 
DVM ©   (2008-12-30 15:33) [21]


> хотя видимо все таки считается что внутренние углы лежат
> на пересечении

тебе виднее


 
имя   (2008-12-30 17:14) [22]

Удалено модератором


 
Нат   (2009-01-03 03:19) [23]

Более того, лучи могут быть разной длины и "ширины"


 
Нат   (2009-01-03 03:23) [24]

Залить внутреннюю область одним цветом, наружную другим.
Брать пользовательские коор-ты и проверять цвет точки.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
13-1122989175
cherrex
2005-08-02 17:26
2009.02.15
Не могу запустить приложение в DELPHI 2005


2-1231342302
Pavelkq
2009-01-07 18:31
2009.02.15
MS Access - доступ на уровне пользователей.


15-1229590921
Calligraff
2008-12-18 12:02
2009.02.15
Непонятный глюк в Delphi


15-1229629312
DVM
2008-12-18 22:41
2009.02.15
А нет ли случаем такого готового класса?


15-1229631516
Newss
2008-12-18 23:18
2009.02.15
Задача компоновки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский