Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.06.2011, 20:52
RaVeN-Nikma вне форума Посмотреть профиль Отправить личное сообщение для RaVeN-Nikma Посетить домашнюю страницу RaVeN-Nikma Найти все сообщения от RaVeN-Nikma
  № 1  
Ответить с цитированием
RaVeN-Nikma

Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
По умолчанию Как можно рассчитать точку пересечения прямой с квадратом

Собственно, есть квадрат 100 на 100 px, внутри него есть случайная точка, за пределами квадрата есть еще одна точка, между этими двумя точками проводится отрезок. Необходимо узнать по какой стороне (ABCD), и в какой точке прямая пересекает квадрат.


Задачу решил, но решение не нравится. Интересно узнать какие варианты кому придут в голову.
Изображения
 

Старый 13.06.2011, 20:55
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Нарисуйте для себя xy координатную ось, где центр квадрата точка нулевая точка, и все вопросы должны отпасть мне кажется
__________________
Марк Tween

Старый 13.06.2011, 21:05
RaVeN-Nikma вне форума Посмотреть профиль Отправить личное сообщение для RaVeN-Nikma Посетить домашнюю страницу RaVeN-Nikma Найти все сообщения от RaVeN-Nikma
  № 3  
Ответить с цитированием
RaVeN-Nikma

Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
И как это поможет найти нужные данные (точку и сторону) Могли бы Вы продолжить мысль
Изображения
 

Старый 13.06.2011, 21:07
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Необходимо узнать по какой стороне (ABCD), и в какой точке прямая пересекает квадрат.
Через пересечение четырех отрезков с заданным.

PS:
Цитата:
Нарисуйте для себя xy
ржунимагу

Старый 13.06.2011, 21:24
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Если есть координаты точек, то очевидно, что какие то xy уже существуют в условиях задачи.
__________________
Отряд Котовскага

Старый 13.06.2011, 22:44
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 6  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Может поможет пересечение прямых?
http://www.murmadillo.tut.su/html/li...Intersect.html
__________________
Гоночка

Старый 14.06.2011, 01:23
RaVeN-Nikma вне форума Посмотреть профиль Отправить личное сообщение для RaVeN-Nikma Посетить домашнюю страницу RaVeN-Nikma Найти все сообщения от RaVeN-Nikma
  № 7  
Ответить с цитированием
RaVeN-Nikma

Регистрация: Jan 2003
Адрес: Latvia, Riga
Сообщений: 161
Alex Lexcuk, спасибо.

Делал тоже на основе пересечение отрезков, но этот пример красивее, чем то что я навоял.

Старый 14.06.2011, 01:59
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 8  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Можно записать уравнение прямой параметрически и решить относительно переменной, которое изменяется. Т.е:

X(t) = begX + (endX - begX) * t; (1)
Y(t) = begY + (endY - begY) * t; (2)

Если подставить значение координаты стороны квадрата (если стороны квадрата ориентированы по осям) По одному из уравнений можно найти t (выбираем то, в котором координата начала и конца не равны). Например, для стороны В вашего квадрата:

maxX = begX + (endX - begX) * t; => t = (maxX - begX) / (endX - begX)

, где maxX - координата Х обеих точек стороны В.

После того, как находим t, получаем координаты точки, подставив t в формулы (1,2).

Отдельно надо будет исследовать параллельность (векторное произведение) со стороной и факт попадания в сторону (пересечение может произойти за стороной).

А вообще, если одна из точек внутри квадрата, может быть ещё более красивое и быстрое решение.

Старый 14.06.2011, 02:51
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 9  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Про пересечение отрезков, рекомендую: http://users.livejournal.com/_winnie/152327.html
С++ код, но должен быть понятен. out_intersection - точка пересечения, если что.
Наглый спойлер: описано, почему не стоит параметризовать!
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 14.06.2011, 13:31
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 10  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Цитата:
Сообщение от -De- Посмотреть сообщение
Про пересечение отрезков, рекомендую: http://users.livejournal.com/_winnie/152327.html
С++ код, но должен быть понятен. out_intersection - точка пересечения, если что.
Наглый спойлер: описано, почему не стоит параметризовать!
Интересная статья. Метод с перпендикуляром красивый.

Одно плохо - автор на умножения в функции не скупился. 16 штук (вместе с делением) - это много. А именно они в основном хавают ресурсы при поиске пересечений.

RaVeN-Nikma

Для определения стороны, в которую попадает отрезок, можно во-первых глянуть направление отрезка (если двигаться от лежащей в квадрате точки) и сразу отсечь половину сторон, с которыми вероятно пересечение (например, если движение будет в положительном направлении по координатам X и Y, то пересечение может быть только со сторонами С и В).

На втором шаге можно глянуть выше или ниже угловая точка (между найденными двумя сторонами) отрезка и найти точно сторону, с которой будем искать пересечение (через векторное произведение). Дальше искать пересечение с конкретной стороной по выбранному вами алгоритму.

Это всё катит, ясное дело, только для ориентированного по осям квадрата.


Последний раз редактировалось semenyakinVS; 14.06.2011 в 13:32. Причина: сделал текст немного понятнее
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:44.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.