|
Геометрическая задачка - определить принадлежность точки к треугольнику в гексагоне, Подскажите алгоритм, а то запутался |
|
|
|
Feb 5 2010, 10:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Народ подскажите пожалуйста, может кто с геометрией на "ты", как проще решить следующую задачу. Есть правильный шестиугольник разбитый на равносторонние треугольники как на рисунке.
Координаты некоторых точек я указал. Все пляшет от величины а - расстояния от центра до удаленной вершины. И есть точка с координатами x,y которая находится где-то в гексагоне. Задача - определить, в каком треугольнике 1-24 она находится. Возможно Вы скажете "просто", но есть ограничения - задача будет решаться на микроконтроллере, поэтому просто "взять тангенс от x/y" и т.д. не получится. Умножать на любое число и делить на константу можно, но корень, тригонометр функции и деление на число - нельзя. Число а - сравнительно медленно измеряемая величина, поэтому от нее корень и деление можно использовать. Пока есть и работает алгоритм определения треугольников 1-18, но с добавлением внутренних треугольников - проблема. Вот как я делаю: Код %% Quarter calculation and rotation if X<0 X=-X; Xinv=1; else Xinv=0; end if Y<0 Y=-Y; Yinv=1; else Yinv=0; end
%% Triangle calculation
Xshift=X-a/4;
if (Y<(a*sqrt(3)/4)) %If Y less than half height then point is in triangle 1 or 2 Yshift=Y+a*sqrt(3)/4; if (Yshift>sqrt(3)*Xshift) triangle=2; else triangle=1; end else %otherwise it is in triangles 3, 4 or 5 Yshift=Y-a*sqrt(3)/4; if (Xshift==0) triangle=4; else if (Xshift<0) if Yshift>(-sqrt(3))*Xshift triangle=4; else triangle=5; end else if (Yshift>sqrt(3)*Xshift) triangle=4; else triangle=3; end end end end Таким образом я разбираюсь только с одной четвертью, а остальные треугольники получаю, просто поворачивая координаты точки.
|
|
|
|
|
 |
Ответов
|
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
|
|
|
|
Сообщений в этой теме
syoma Геометрическая задачка - определить принадлежность точки к треугольнику в гексагоне Feb 5 2010, 10:58 Tanya Цитата(syoma @ Feb 5 2010, 13:58) Народ п... Feb 5 2010, 11:18 ukpyr http://local.wasp.uwa.edu.au/~pbourke/geometry/ins... Feb 5 2010, 12:30 scifi Мне кажется, тут нужно перейти от прямоугольного б... Feb 5 2010, 12:31 тау Умножаем все по оси Х на sqrt(3). В том числе коор... Feb 5 2010, 16:28 syoma ЦитатаУмножаем все по оси Х на sqrt(3). В том числ... Feb 5 2010, 16:51 тау IF-ы ничем не лучше итераций, суть одна. Можете ра... Feb 5 2010, 17:17 syoma Цитата(тау @ Feb 5 2010, 20:17) Бэйсик не... Feb 6 2010, 17:34 @Ark Я бы так решил эту задачу: Провел бы через все вер... Feb 5 2010, 22:55 ReAl Имеем три системы прямых - горизонтальные, наклонн... Feb 6 2010, 00:52 ALEKSIU Подобную задачу принадлежности точки треугольника ... Feb 6 2010, 07:41 Миша Т Цитата(ALEKSIU @ Feb 6 2010, 10:41) Подоб... Feb 6 2010, 12:04 ALEKSIU Цитата(Миша Т @ Feb 6 2010, 16:04) для ус... Feb 6 2010, 12:35 тау Вот еще проще способ.
координаты X точки модифицир... Feb 6 2010, 21:26 blackfin Цитата(syoma @ Feb 5 2010, 19:51) Не подо... Feb 8 2010, 06:30 syoma Спасибо всем и особенно blackfin.
Ваше решение ока... Feb 12 2010, 08:32 blackfin Цитата(syoma @ Feb 12 2010, 11:32) Спасиб... Feb 12 2010, 09:11 scifi Заранее извиняюсь за оффтопик.
Просто грустно стал... Feb 12 2010, 20:23 syoma ЦитатаПросто грустно стало: решаем тут задачки уро... Feb 15 2010, 09:03 scifi Цитата(syoma @ Feb 15 2010, 12:03) А Вы, ... Feb 15 2010, 11:12   Tanya Цитата(syoma @ Mar 1 2010, 11:50) Тут как... Mar 1 2010, 09:16    syoma Цитата(Tanya @ Mar 1 2010, 12:16) А Вы ду... Mar 2 2010, 09:15 syoma Блин, единственное что придумал - в цикле уменьшат... Mar 9 2010, 14:15 blackfin Цитата(syoma @ Mar 9 2010, 17:15) Блин, е... Mar 9 2010, 14:57  syoma Цитата(blackfin @ Mar 9 2010, 17:57) Для ... Mar 9 2010, 15:22   blackfin Цитата(syoma @ Mar 9 2010, 18:22) Под сло... Mar 9 2010, 15:27    syoma Цитата(blackfin @ Mar 9 2010, 18:27) Сфор... Mar 9 2010, 16:16 Tanya Цитата(syoma @ Mar 9 2010, 17:15) По вект... Mar 9 2010, 16:55  Tanya Цитата(Tanya @ Mar 9 2010, 19:55) Знаки в... Mar 9 2010, 20:00 blackfin Цитата(syoma @ Mar 9 2010, 19:16) Даны ко... Mar 10 2010, 03:42 syoma Спасибо опять blackfin.
Опять упростилось и стало... Mar 10 2010, 11:03 Tanya Цитата(syoma @ Mar 10 2010, 14:03) Теперь... Mar 10 2010, 12:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|