|
Геометрическая задачка - определить принадлежность точки к треугольнику в гексагоне, Подскажите алгоритм, а то запутался |
|
|
|
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 Таким образом я разбираюсь только с одной четвертью, а остальные треугольники получаю, просто поворачивая координаты точки.
|
|
|
|
|
 |
Ответов
|
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"); Под словом "вычислять" я понимал именно это. Нужна конкретная точка, желательно на границе, а не условие принадлежности к гексагону.
|
|
|
|
Сообщений в этой теме
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 Цитата(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
|
|
|