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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Геометрическая задачка - определить принадлежность точки к треугольнику в гексагоне, Подскажите алгоритм, а то запутался
syoma
сообщение Feb 12 2010, 08:32
Сообщение #16


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

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



Спасибо всем и особенно blackfin.
Ваше решение оказалось самым простым в реализации.
Мне даже не понадобился массив - получившиеся индексы однозначно идентифицируют координаты треугольника - это даже еще лучше. Более того сумма индексов, а именно четность или нечетность определяют куда направлен конкретный треугольник - вверх или вниз - мне это тоже нужно было знать.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Feb 12 2010, 09:11
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 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-мерного массива вынимаем номер треугольника.

Но поскольку народ, и Вы в частности, принялись активно забалтывать предложенное решение, я взял на себя смелость записать предложенный им алгоритм на Си, внеся по ходу дела небольшое изменение в алгоритм вычисления одного из идексов.
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 12 2010, 20:23
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Заранее извиняюсь за оффтопик.
Просто грустно стало: решаем тут задачки уровня 8-го класса средней школы.
Неужели масштаб деградации так велик?
:-(
Go to the top of the page
 
+Quote Post
syoma
сообщение Feb 15 2010, 09:03
Сообщение #19


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

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



Цитата
Просто грустно стало: решаем тут задачки уровня 8-го класса средней школы.
Неужели масштаб деградации так велик?

Возможно. Просто у меня мозг так устроен - информация которая долго не используется и не нужна по профессии - забывается.
А Вы, наверное, помните всю биологию за 8 класс?

+ Деградация в этой области мне не мешает решать все поставленные задачи. А для этого случая 01.gif и есть Форум.
beer.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 15 2010, 11:12
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(syoma @ Feb 15 2010, 12:03) *
А Вы, наверное, помните всю биологию за 8 класс?

Да, помню - с помощью гугла и Википедии :-)

Пардон, я не хотел, чтобы звучало, как личный наезд. Мысль была типа" "Вот раньше - огого! А вот сейчас - не очень..." Про общий упадок в наши времена...
Go to the top of the page
 
+Quote Post
syoma
сообщение Feb 26 2010, 13:41
Сообщение #21


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

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



Сорри. Еще раз я.
Вот теперь другой вопрс назрел - а что делать, если исходная точка и соответственно вектор находятся за пределами гексагона? Конкретно как найти координаты x',y' точки которая лежит на заданной прямой в пределах гексагона?
В данный момент я делаю просто ограничение по координате y, а затем вычисляю максимальное значение координаты x по формуле xmax=a - y*(1/sqrt(3)).
Проблема в том, что если координата y обрезается, то я всегда попадаю в точку 1 независимо от того насколько большая координата x, что мне совсем не нравится. Хотелось бы, чтобы алгоритм также выдавал точки 2 и 3 если x намного больше y.
Пардон - последний абзац я и сам вычислю, надо бы точные координаты.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 27 2010, 00:28
Сообщение #22


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(syoma @ Feb 26 2010, 16:41) *
Пардон - последний абзац я и сам вычислю, надо бы точные координаты.
Дык просто же пересечение 2 прямых на плоскости
(0,0) - (x,y) и
точка1 - точка3
Go to the top of the page
 
+Quote Post
syoma
сообщение Mar 1 2010, 08:50
Сообщение #23


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

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



Цитата(singlskv @ Feb 27 2010, 03:28) *
Дык просто же пересечение 2 прямых на плоскости
(0,0) - (x,y) и
точка1 - точка3

Это то легко. Только формула для нахождения координат этой точки не очень легкая:
Прикрепленное изображение

Тут как раз есть деление, которое я делать не могу.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Mar 1 2010, 09:16
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(syoma @ Mar 1 2010, 11:50) *
Тут как раз есть деление, которое я делать не могу.

А Вы думаете, что существует чудесная альтернативная формула, дающая тот же ответ, но без деления?
Если же интересует только с какой стороной пересекается прямая, то это возможно. Вариант - рассмотрите векторные произведения...
Go to the top of the page
 
+Quote Post
syoma
сообщение Mar 2 2010, 09:15
Сообщение #25


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

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



Цитата(Tanya @ Mar 1 2010, 12:16) *
А Вы думаете, что существует чудесная альтернативная формула, дающая тот же ответ, но без деления?

Ага. Надеюсь, что что-то проспал по геометрии. Но похоже, что нет.
Цитата(Tanya @ Mar 1 2010, 12:16) *
Если же интересует только с какой стороной пересекается прямая, то это возможно. Вариант - рассмотрите векторные произведения...

Ок. Спасибо, посмотрю.
Go to the top of the page
 
+Quote Post
syoma
сообщение Mar 9 2010, 14:15
Сообщение #26


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

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



Блин, единственное что придумал - в цикле уменьшать координаты x,y каждый раз в 2 раза и вычислять попадают они в гексагон или еще нет.
Но, елки-палки, тогда количество итераций неопределенная величина.
По векторным произведениям не нашел применения в моем случае.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Mar 9 2010, 14:57
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(syoma @ Mar 9 2010, 17:15) *
Блин, единственное что придумал - в цикле уменьшать координаты x,y каждый раз в 2 раза и вычислять попадают они в гексагон или еще нет.

Для тех, кто "забыл биологию за 8 класс":
Код
if ((abs(COMPA)<=2)&&(abs(COMPB)<=2)&&(abs(COMPC)<=2)) printf("Inside Hexagone");
else printf("Outside Hexagone");
Go to the top of the page
 
+Quote Post
syoma
сообщение Mar 9 2010, 15:22
Сообщение #28


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

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

Под словом "вычислять" я понимал именно это. Нужна конкретная точка, желательно на границе, а не условие принадлежности к гексагону.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Mar 9 2010, 15:27
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(syoma @ Mar 9 2010, 18:22) *
Под словом "вычислять" я понимал именно это. Нужна конкретная точка, желательно на границе, а не условие принадлежности к гексагону.

Сформулируйте точнее, что "дано", а что нужно "вычислить"..
Go to the top of the page
 
+Quote Post
syoma
сообщение Mar 9 2010, 16:16
Сообщение #30


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

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



Цитата(blackfin @ Mar 9 2010, 18:27) *
Сформулируйте точнее, что "дано", а что нужно "вычислить"..

В этом сообщении я написал, что нужно вычислить.
Даны координаты точки X,Y, которая лежит где-то за пределами гексагона. Надо найти координаты точки X',Y', которая должна находиться в гексагоне, желательно, на границе и которая должна быть как можно ближе или лежать на прямой 0,0 - X,Y.
Пока я пользуюсь обрезками, но они дают совсем искаженный результат.
Я уже думаю, бог с ним - с делением, можно попробовать использовать. То есть если обрезаю одну координату, то скалирую другую, но все равно получается фигня с косыми сторонами, тогда происходит передоз и точка получается внутри гексагона далеко от внешних сторон.
Go to the top of the page
 
+Quote Post

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

 


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


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