Здравствуйте!!!!
задание по комп.графике......
может кто подскажет литературу по данной теме)
Задание:
комната 5 на 5 метров. в этой комнате в самом центе расположен стол.
на столе расположенны пронумерованные прямоугольные листочки бумаги.
листочки склажываются на стол в порядке их нумерации: 1-2...
стол прямогольный его размеры Тх и Ту.
центр слола расположен ы центре комнаты.
также известны размеры листочков по осям Х и У равные Sxi и Sуi (i-номер листочка),
расположение центра каждого листочка на столе (две координаты Dxi и Dуi относительно левого нижнего угла стола).
после каждый листочек поворачивается на угол ai относительно своего центра(если угол больше - поворачиваем по часой стрелке иначе против).
порядок листочков при этом не меняется.
Затем таким же образом поворасивается стол на угол b.
про листочки известно что каждый из них разделен на 4 одинаковые прямоугольные области - A,B,C,D.
теперь с потолка падает капля и попадает на стол, возможно попадая на некоторые листочки. предполается что капля бесконечно малого размера (имеется в вид протяженность по осям X и У) но тем не менее,способна промочить сколь угодно листочков.
про капля известны ее координаты Cx, Сув момент падения относительно левого нижнего угла комнаты.
необходимо определить на какие именно листочки попадет капля в каой поледовательности она их намочит, а также для каждого промоченногго листочка необходимо указать в какую из его обласстей A,B,C,D попала капля.
(Тх,Ту,B )-(192,120,62)
(Sx1,Sy1)-(69,58)
(Dx1,Dy1,a1)-(145,88,10)
(Sx2,Sy2)-(29,35)
(Dx2,Dy2,a2)-(107,77,66)
(Sx3,Sy3)-(79,39)
(Dx3,Dy3,a3)-(17,80,86)
(Sx4,Sy4)-(53,67)
(Dx4,Dy4,a4)-(90,77,56)
(Sx5,Sy5)-(57,41)
(Dx5,Dy5,a5)-(90,57,78)
(Cx,Cy)-(270,253)
Хм... Во-первых, вот что выясним. Листочек когда поворачивается, он ведь другие не затрагивает? Только своё положение меняет, то всё довольно просто.
Выяснять порядок промокания тогда не нужно: если намочено несколько листочков, то первыми намокнут те, которые положили последними.
Теперь о преобразованиях.
Из преобразований понадобится поворот вокруг точки:
формула следующая
http://img706.imageshack.us/i/codecogseqn.gif/
x', y' - новые координаты, x, y - старые, alpha - угол поворота, cx, cy - центр поворота
Ещё я бы хранил что-то типа "векторов ориентации" для этих листочков, их тоже надо поворачивать вокруг оси а затем и вместе со столом. Изначально, как я понял, они у всех одинаковые и направлены, например в направлении (0;1). Потом по ним можно будет определить попадание капли в одну из областей.
Удобно будет всё привести к одной системе координат. Я бы взял за её начало центр стола.
Осталось лишь определить, попала ли точка в тот или иной листочек. Предлагаю сначала определить возможную область попадания. То есть, найти угол между вектором направления листочка, а уж затем проверять, согласовываясь с длиной и шириной листка.
Литературы, к сожалению, не знаю, у нас очень хороший преподаватель по КГ, мы у него всё узнавали, что непонятно было.
о, спасибо огромное!!!
теперь задание на много стало понятнее, но все же....
с чего необходимо начать?
и как выполнить
1. Выбрать систему отсчёта (как я уже сказал - центр стола)
2. Записать новые координаты центров листков
http://img257.imageshack.us/i/equationx.png/
//прошу прощения, тут вместо Dx, Dy должны быть Tx и Ty соответственно.
3. Для каждого листка задать вектор ориентации (0;1).
4. Повернуть каждый листок на свой угол, то есть ту формулу, что я написал выше, надо применить к векторам поворота. В качестве центра - взять координаты центра каждого листка в новой системе координат.
5. Применить ко всем точкам и ко всем векторам формулу поворота относительно точки (0; 0) (центр стола)
6. Рассчитаем новую координату точки падения капли - отнимем от x и к y по 2,5 (половина длины/ширины комнаты)
После этих 5 пунктов мы имеем записанные в одной новой системе координат с центром в середине комнаты:
а. Координаты центров листков.
б. Векторы ориентации листков.
в. Координаты падения капли
г. Размеры всех листков (естественно, никуда не поменялись)
Определить, в какую область попала точка, если вообще попала, можно из формул скалярного и векторного умножения
Пусть a - вектор ориентации, b - вектор из центра листка к координате капли. Тогда
http://img810.imageshack.us/i/equation.png/,
где x - векторное умножение, * - скалярное - если нужно, дам формулы для двухмерного случая.
Их же используем для проверки попадания в листок, капля попала в листок, если:
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
Как-то так, будут вопросы - обращайтесь)
большое-большое спасибо, прямо огромное, за подробное описание)
к сожалению сейчас не будет возможности иметь доступ в иннет, но 27 числа я обязательно отпишусь....так что не теряйте....и возможно появятся вопросы...
а вот и вопросы......
начнем по пунктам:
1. (96,60)--центр стола
2.Записать новые координаты центров листков
я так поняла в формуле под x y мне брать Dxi и Dyi-(расположение центра каждого листочка на столе, относительно левого нижнего угла стола),если так, то
Потихоньку буду добавлять комментарии:
Во 2 пункте у меня ошибка, там вместо + нужен -.
Если у точки была координата 96; 60, то она должна стать 0;0, а не 192; 120
Ещё один мой недочёт - векторы поворота можно вертеть относительно любой точки. Вращаем относительно 0;0, и в 4, и в 5 пункте
Даже не относительно любой, а именно относительно 0;0))
А поскольку мы выбрали новую систему отсчёта, то и точки в 5 пункте мы будем вращать относительно 0;0.
если заменить 2 пункт, то....
координата точки Dx1,Dy1 (145,88)
Dx1,Dy1-расположение центра каждого листочка на столе, относительно левого нижнего угла стола.
или тут надо брать (Sx1,Sy1)-(69,58) - размеры листочков по осям Х и У?!
именно так, теперь x' и y' верные
Теперь надо поворачивать. Сначала каждый листочек по отдельности, затем все вместе
http://slil.ru/29501550 - вот расчёт первого этапа - все листочки и стол повернуты. Будет желание, можно проанализировать и падение капли)
спасиб большое!!!
Попробуй сама, полезней будет, будет совсем туго - посчитаю
конечно сама просто так на всякий случай....чтобы ты меня проверял
a - вектор ориентации после всех поворотов
b - это совсем не та B, что в начале. В начале у нас B - это угол поворота стола в градусах. Теперь же
Всё, кроме координат капли.
Координаты будут (20,3) - относительно центра стола и комнаты.
а можно формулу для подсчета координаты капли?
x'=x-250
y'=y-250
Вычитаем по половине длины и ширины комнаты
ммм, ясно
теперь на счет формулы....
bx = Cx_new - x2
by = Cy_new - y2
Формулы нужны обе.
Допустим области вот так расположены
BA
CD
Тогда соответствие будет такое
A: sin>0 cos>0
B: sin>0 cos<0
C: sin<0 cos<0
D: sin<0 cos>0
Только нужно проверить расстояние ещё.
Я посчитала bx, by.
bx
-27,72663918
-0,174296269
39,4293016
7,806720298
25,46567216
by
33,11922829
4,731406954
-76,14229109
-10,27870212
-0,889270869
У меня области расположенны так
АВ
СD
Соответствие:
A: sin>0 cos<0
B: sin>0 cos>0
C: sin<0 cos<0
D: sin<0 cos>0
Верно?
Векторное и скалярное умножение можно посчитать в MS Excel?
bx, by - вроде бы такие же вышли
ABCD - верно
Скалярное умножение: a*b = ax*bx+ay*by
Векторное умножение: a*b = ax*by - bx*ay
акутально ещё? просто на юге был...
конечно актуально)))))
Эх... опять немножко с синусами/косинусами облажался...
Всё было верно, если бы у нас вектор ориентации изначальный был (1;0)
А так... Получается немного иначе...
У меня области расположенны так
АВ
СD
Соответствие:
A: sin>0 cos>0
B: sin<0 cos>0
C: sin>0 cos<0
D: sin<0 cos<0
Советую проверить, эти вот выводы берутся из свойств синуса и косинуса.
Кстати, формула для проверки попадания почему-то верная... Наверное, я их в разное время выводил...
Да, дальше использовать её.
Да, я написал как правильно по-новому
то есть изменили только вектор ориентации и соответсвие?
и то, и другое b - вектор из центра на каплю. Только в sin и cos - там вектор, я указал раньше, как считать. А снаружи b, на которое мы домножаем синус и косинус, получается модуль этого вектора.
получается так
bх*(ax*bx+ay*by)
bу*(ax*bx+ay*by)
bх*(ax*by - bx*ay)
bу*(ax*by - bx*ay)
???
вовсе нет. Забыла про знаменатели косинуса и синуса...
ааа блин это что я не полностью формулу сделала...
извини у меня чет не получается сюда картинки вставлять
ты мне в 4 сообщение формулы дал косинус и синус там....
потом написал скалярное и векторно произведение:
нет, тут всё ок, но только как раз через эти произведения я предлагал вычислить синус и косинус.
не скалярное умножение векторов...
Скалярное умножение модулей....
(может, ты об этом и говорила, конечно ))) ) Но на всякий случай вот пример:
например, a=(3;4), b=(4;3)
|a|=|b|=корень(3^2+4^2)=корень(25)=5.
скалярное умножение a*b=3*4+4*3=24
умножение модулей |a|*|b|= 5*5 = 25
пример оч нужный)
у меня выражение: |a|*|b|
теперь смотри мне надо сначало:
1. скалярное призведение
2. умножение модулей
о, все!!! я почитала геметрию все нашла)))))) спасибо вам!
посчитала
a*b
-0,373558992
-0,644253339
0,996746318
0,907900672
0,669130315
aXb
0,927606425
0,764812157
-0,080602595
-0,419185364
0,743145088
Хм.. ответ? Не знаю ответа...)))
Но вот эти вот два столбца - уже не произведения, а косинусы и синусы соответственно. Сначала косинусы, потом синусы.
Теперь нужно проверить, попала ли она в листок, или нет. Попадает, когда
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
Если попала, то по знаку синуса и косинуса определяем четверть.
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
а какую b необходимо брать?
ух)) чем дальше, тем сложнее вспоминать)))
а b - у нас вроде как один для каждого листочка, или я не прав?
Единственное что добавлю, b и B - в данном случае одно и то же)))
sin(a^B ) и cos(a^B ) уже посчитанны.
Sx и Sy даны в задании.
b - у нас вроде как один для каждого листочка
есть b в задание это поворот стола на угол.
или брать
b - вектор из центра листка к координате капли
не могу понять...
b - модуль вектора из листка к капле
каждому листочку соответствует свой, один, уникальный вектор )) У него есть координаты bx и by)) Модуль, она же длина вектора - это корень из суммы квадратов координат (|b|=sqrt(bx^2+by^2)).
Если бы хотел сказать, что вектор b - один для всех, сказал бы "один для всех"))
посчитала)
b*cos(a^B )
-16,13519648
-3,05029232
85,46667149
11,71848325
17,05023954
Sy
58
35
39
67
41
выходит(cos)
п(-)
п(-)
нп
п(+)
п(+)
b*sin(a^B )
40,06626058
3,621092061
-6,911322715
-5,41052212
18,93622435
Sx
69
25
79
53
57
выходит(sin)
п(+)
п(+)
п(-)
п(-)
п(+)
четверть определять по знаку косинуса и синуса, знаки подписала.
чтобы определить четверть используем формулу или по соотношению?
A: sin>0 cos>0
B: sin<0 cos>0
C: sin>0 cos<0
D: sin<0 cos<0
верно?
чегой-то она почти везде попала, меня это настораживает))
Оговорюсь сразу, циферки кое-где не пересчитывал....
Как определять четверть, написано правильно, A,B,C,D.....
все же соответствие должно быть таким:
A: sin>0 cos<0
B: sin>0 cos>0
C: sin<0 cos<0
D: sin<0 cos>0
1(A)-2(A)-4(D)-5(B )
верно?
Нет, не таким...
Я же потом поправился...
Области такие
АВ
СD
Соответствие:
A: sin>0 cos>0
B: sin<0 cos>0
C: sin>0 cos<0
D: sin<0 cos<0
блин ну почему нет такие то???
я по свойствам делала
Ага)) Только в свойствах 0-й угол считается от горизонтали))
А у нас косинусы и синусы угла между направлением на точку и вектором направления, который смотрит вертикально вверх. Поэтому область A - это углы [0;90], B - [270;360]; C - [90;180]; D - [180;270];
Для них можно посмотреть знаки синусов и косинусов. К сожалению, не могу нарисовать и сфоткать, но смысл в том, что отсчитываем мы не от горизонтали, а от вектора направления, который изначально смотрит как раз вертикально вверх.
спасибо, что объяснил)
ответ вышел таким: 1(С )-2(С )-4(B )-5(A)
в 3 лист же не попала капля?
получается, что не попала)))
эх...наконец то задание сделанно)))
спасибо тебе большое, за помощь!!!!
да, пожалуйста))
хотя... оно больше на геометрию, чем на информатику/программирование.
Мы даже на DirectX кой-чего писали - вот єто мудрено и интересно)
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)