|
|
  |
Геометрическая задачка - определить принадлежность точки к треугольнику в гексагоне, Подскажите алгоритм, а то запутался |
|
|
|
Feb 12 2010, 09:11
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(syoma @ Feb 12 2010, 11:32)  Спасибо всем и особенно blackfin. Ваше решение оказалось самым простым в реализации. Решение, на самом деле, предложил ReAl: Цитата(ReAl @ Feb 6 2010, 03:52)  Ха - как вариант - int(y/шаг) - это номер прямой для горизонтальных линий. Теперь поворачиваем точку на 60 градусов влево и вправо и для y-ка новой точки так же делением на шаг выясняем номер. Дальше при помощи этих трёх номеров из фикисрованного 3-мерного массива вынимаем номер треугольника. Но поскольку народ, и Вы в частности, принялись активно забалтывать предложенное решение, я взял на себя смелость записать предложенный им алгоритм на Си, внеся по ходу дела небольшое изменение в алгоритм вычисления одного из идексов.
|
|
|
|
|
Feb 15 2010, 09:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата Просто грустно стало: решаем тут задачки уровня 8-го класса средней школы. Неужели масштаб деградации так велик? Возможно. Просто у меня мозг так устроен - информация которая долго не используется и не нужна по профессии - забывается. А Вы, наверное, помните всю биологию за 8 класс? + Деградация в этой области мне не мешает решать все поставленные задачи. А для этого случая  и есть Форум.
|
|
|
|
|
Feb 26 2010, 13:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Сорри. Еще раз я. Вот теперь другой вопрс назрел - а что делать, если исходная точка и соответственно вектор находятся за пределами гексагона? Конкретно как найти координаты x',y' точки которая лежит на заданной прямой в пределах гексагона? В данный момент я делаю просто ограничение по координате y, а затем вычисляю максимальное значение координаты x по формуле xmax=a - y*(1/sqrt(3)). Проблема в том, что если координата y обрезается, то я всегда попадаю в точку 1 независимо от того насколько большая координата x, что мне совсем не нравится. Хотелось бы, чтобы алгоритм также выдавал точки 2 и 3 если x намного больше y. Пардон - последний абзац я и сам вычислю, надо бы точные координаты.
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 27 2010, 00:28
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(syoma @ Feb 26 2010, 16:41)  Пардон - последний абзац я и сам вычислю, надо бы точные координаты. Дык просто же пересечение 2 прямых на плоскости (0,0) - (x,y) и точка1 - точка3
|
|
|
|
|
Mar 2 2010, 09:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата(Tanya @ Mar 1 2010, 12:16)  А Вы думаете, что существует чудесная альтернативная формула, дающая тот же ответ, но без деления? Ага. Надеюсь, что что-то проспал по геометрии. Но похоже, что нет. Цитата(Tanya @ Mar 1 2010, 12:16)  Если же интересует только с какой стороной пересекается прямая, то это возможно. Вариант - рассмотрите векторные произведения... Ок. Спасибо, посмотрю.
|
|
|
|
|
Mar 9 2010, 15:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата(blackfin @ Mar 9 2010, 17:57)  Для тех, кто "забыл биологию за 8 класс": Код if ((abs(COMPA)<=2)&&(abs(COMPB)<=2)&&(abs(COMPC)<=2)) printf("Inside Hexagone"); else printf("Outside Hexagone"); Под словом "вычислять" я понимал именно это. Нужна конкретная точка, желательно на границе, а не условие принадлежности к гексагону.
|
|
|
|
|
Mar 9 2010, 16:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Цитата(blackfin @ Mar 9 2010, 18:27)  Сформулируйте точнее, что "дано", а что нужно "вычислить".. В этом сообщении я написал, что нужно вычислить. Даны координаты точки X,Y, которая лежит где-то за пределами гексагона. Надо найти координаты точки X',Y', которая должна находиться в гексагоне, желательно, на границе и которая должна быть как можно ближе или лежать на прямой 0,0 - X,Y. Пока я пользуюсь обрезками, но они дают совсем искаженный результат. Я уже думаю, бог с ним - с делением, можно попробовать использовать. То есть если обрезаю одну координату, то скалирую другую, но все равно получается фигня с косыми сторонами, тогда происходит передоз и точка получается внутри гексагона далеко от внешних сторон.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|