реклама на сайте
подробности

 
 
> Геометрическая задачка - определить принадлежность точки к треугольнику в гексагоне, Подскажите алгоритм, а то запутался
syoma
сообщение Feb 5 2010, 10:58
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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

Таким образом я разбираюсь только с одной четвертью, а остальные треугольники получаю, просто поворачивая координаты точки.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - syoma   Сорри. Еще раз я. Вот теперь другой вопрс назрел -...   Feb 26 2010, 13:41
|- - singlskv   Цитата(syoma @ Feb 26 2010, 16:41) Пардон...   Feb 27 2010, 00:28
|- - syoma   Цитата(singlskv @ Feb 27 2010, 03:28) Дык...   Mar 1 2010, 08:50
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.02248 секунд с 7
ELECTRONIX ©2004-2016