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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.12.2012, 23:11
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 11  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Нужно просто совместить по две вершины красной и черной фигур (как у вас А-А1,С-С1), изменяя линейные размеры одной из них, это вы называете "вписанием"? Тогда пропорционального изменения размеров при таком "вписании" в общем случае не добиться. Или надо, чтобы одна фигура полностью "поглотила" другую, лишь бы все точки одной фигуры попали внутрь другой?

Старый 27.12.2012, 05:22
Frost47rus вне форума Посмотреть профиль Отправить личное сообщение для Frost47rus Найти все сообщения от Frost47rus
  № 12  
Ответить с цитированием
Frost47rus
[+4 08.09.13]

Регистрация: May 2012
Сообщений: 131
Если именно так, как на рисунке из начала топика, то по умолчанию должна выполняться такая вот штука:
a/b * x = c/d

найти x тут не составит труда.

а если она не выполняется - тогда решение другое.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 85
Размер:	108.7 Кб
ID:	28890  

Старый 27.12.2012, 12:48
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 13  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Да, нужно чтобы красная фигура поглотила черную, увеличившись в размерах

Старый 27.12.2012, 21:20
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 14  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
А вот интересно, при помощи BitmapData.threthold и BitmapData.getColorBoundsRect нельзя ли решить эту задачу ?
К примеру, сделать битмап дату черную с дыркой внутри нее такой же формы как и красный четырехугольник.
Каким-либо образом получить прямоугольник дырки (прозрачных пикселей), но не описаный а вписаный
На скрине у меня получилось сделать такую битмапу (черную) слева вверху (там масштаб в 10 раз уменьшен), но получается только вычислить прямоугольник описаный "вокруг " прозрачной области на черном фоне (синий прямоугольник)
Можно ли как-нибудь средствами битмап даты получить этот вписаный прямоугольник ?
Миниатюры
Нажмите на изображение для увеличения
Название: getColorBounds.jpg
Просмотров: 80
Размер:	34.6 Кб
ID:	28896  

Старый 28.12.2012, 13:42
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 15  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Я все думаю, что можно как-то дополнить до чего-то попроще, возможно до треугольника, и уже поняв, как это сделать, "подправить" до четырехугольника.
И еще, лучше все-таки задать ограничения для четырехугольника, что он должен быть выпуклым и чтобы у него не было параллельных сторон (случай с параллельными сторонами рассматривать отдельно, т.как там бесконечно много эквивалентных решений).
Я бы наверное на какой-нибудь mathoverflow.com запостил. Задачка, как бы совсем нетривиальная. Скорее всего, у нее есть аналитическое решение, но если нет... то тогда только "методом последовательных приближений"...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 28.12.2012 в 13:54.
Старый 28.12.2012, 14:26
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 16  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Ну, допустим, увеличивать я научился, вполне может быть что этот алгоритм и не ошибется

pm.points - 4 точки красного четырехугольника

Код AS3:
// границы красного спрайта (четырехугольника) внутри сцены
var rect:Rectangle=transformSprite.getRect(FlexGlobals.topLevelApplication.stage);
 
var minHeight:Number=10000;
var minWidth:Number=10000;
 
var widthStartIndex:int;
var heightStartIndex:int;
 
// min height
if(Math.abs(pm.points[0].y-pm.points[3].y)<minHeight)
{
	minHeight=Math.abs(pm.points[0].y-pm.points[3].y);
	heightStartIndex=0;
}
if(Math.abs(pm.points[1].y-pm.points[2].y)<minHeight)
{
	minHeight=Math.abs(pm.points[1].y-pm.points[2].y);
	heightStartIndex=1;
}
if(Math.abs(pm.points[0].y-pm.points[2].y)<minHeight)
{
	minHeight=Math.abs(pm.points[0].y-pm.points[2].y);
	heightStartIndex=0;
}
if(Math.abs(pm.points[1].y-pm.points[3].y)<minHeight)
{
	minHeight=Math.abs(pm.points[1].y-pm.points[3].y);
	heightStartIndex=1;
}
 
// min width
if(Math.abs(pm.points[0].x-pm.points[1].x)<minWidth)
{
	minWidth=Math.abs(pm.points[0].x-pm.points[1].x);
	widthStartIndex=0;
}
if(Math.abs(pm.points[0].x-pm.points[2].x)<minWidth)
{
	minWidth=Math.abs(pm.points[0].x-pm.points[2].x);
	widthStartIndex=2;
}
if(Math.abs(pm.points[3].x-pm.points[2].x)<minWidth)
{
	minWidth=Math.abs(pm.points[3].x-pm.points[2].x);
	widthStartIndex=3;
}
if(Math.abs(pm.points[3].x-pm.points[1].x)<minWidth)
{
	minWidth=Math.abs(pm.points[3].x-pm.points[1].x);
	widthStartIndex=1;
}
 
trace("minWidth",minWidth,"minHeight",minHeight);
trace("widthStartIndex",widthStartIndex,"heightStartIndex",heightStartIndex);
 
var coeffWidth:Number=980/minWidth;
var coeffHeight:Number=540/minHeight;
 
if(coeffWidth>coeffHeight)
{
      coeff=coeffWidth;
}
else
{
	coeff=coeffHeight;
}
 
// позиционирование в лев верх экрана
pm.points[1].x-=rect.x;
pm.points[1].y-=rect.y;
 
pm.points[2].x-=rect.x;
pm.points[2].y-=rect.y;
 
pm.points[3].x-=rect.x;
pm.points[3].y-=rect.y;
 
pm.points[0].x-=rect.x;
pm.points[0].y-=rect.y;
 
// scale
pm.points[0].x=pm.points[0].x*coeff;
pm.points[0].y=pm.points[0].y*coeff;
 
pm.points[1].x=pm.points[1].x*coeff;
pm.points[1].y=pm.points[1].y*coeff;
 
pm.points[2].x=pm.points[2].x*coeff;
pm.points[2].y=pm.points[2].y*coeff;
 
pm.points[3].x=pm.points[3].x*coeff;
pm.points[3].y=pm.points[3].y*coeff;
Но вот как спозиционировать внутри экрана уже увеличенный я не знаю

Старый 02.01.2013, 13:03
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 17  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Ещё в прошлом году пришла идея - если у вашего четырёхугольника не пересекаются противоположные стороны, можно взять и нарисовать два прямоугольника используя противоположные вершины вашего четырёхугольника. В результате пересечения этих двух прямоугольников у нас будет третий прямоугольник который всегда будет внутри вашего четырёхугольника, в него уже надо пытаться вписать ваш исходный прямоугольник.
Есть конечно неприятный момент (очень), когда ширина(высота) этого конечного прямоугольника будет очень маленькой(равна нулю) (это когда х или у противоположных вершин четырёхугольника будут ~ равны), тогда вам придётся увеличивать четырёхугольник до огромных размеров (бесконечности) чтобы получилось вписать ваш прямоугольник.
В общем получить конечный прямоугольник в который нужно вписывать ваш, у меня получилось, а уже увеличивать всю эту конструкцию - уже праздник был на носу, может как-нибудь вечерком закончу. Кое-где вычисляю лишнее, но в общем как-то так
Тыкаете 4 раза туда где должны быть вершины, на пятый клик всё отрисуется.
Geom.swf   (2.8 Кб)
Вложения
Тип файла: swf Geom.swf (2.8 Кб, 70 просмотров)
Тип файла: rar Main.rar (2.1 Кб, 9 просмотров)


Последний раз редактировалось AlexLucas; 02.01.2013 в 13:18.
Старый 04.01.2013, 12:16
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 18  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Если нужно общее решение, можно взять окружности вписанные в четырёхугольник (например вписанные в треугольники), выбрать наибольшую и смасштабировать в неё прямоугольник. Заполнение будет не оптимальным, но возможно достаточным.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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