julia_lisha
Сообщение
#61154 20.7.2010, 11:27
Здравствуйте!!!!
задание по комп.графике......
может кто подскажет литературу по данной теме)
Задание:
комната 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)
Vahappaday
Сообщение
#61161 20.7.2010, 16:06
Хм... Во-первых, вот что выясним. Листочек когда поворачивается, он ведь другие не затрагивает? Только своё положение меняет, то всё довольно просто.
Выяснять порядок промокания тогда не нужно: если намочено несколько листочков, то первыми намокнут те, которые положили последними.
Теперь о преобразованиях.
Из преобразований понадобится поворот вокруг точки:
формула следующая

x', y' - новые координаты, x, y - старые, alpha - угол поворота, cx, cy - центр поворота
Ещё я бы хранил что-то типа "векторов ориентации" для этих листочков, их тоже надо поворачивать вокруг оси а затем и вместе со столом. Изначально, как я понял, они у всех одинаковые и направлены, например в направлении (0;1). Потом по ним можно будет определить попадание капли в одну из областей.
Удобно будет всё привести к одной системе координат. Я бы взял за её начало центр стола.
Осталось лишь определить, попала ли точка в тот или иной листочек. Предлагаю сначала определить возможную область попадания. То есть, найти угол между вектором направления листочка, а уж затем проверять, согласовываясь с длиной и шириной листка.
Литературы, к сожалению, не знаю, у нас очень хороший преподаватель по КГ, мы у него всё узнавали, что непонятно было.
julia_lisha
Сообщение
#61170 21.7.2010, 12:12
о, спасибо огромное!!!
теперь задание на много стало понятнее, но все же....
с чего необходимо начать?
и как выполнить
Цитата
Ещё я бы хранил что-то типа "векторов ориентации" для этих листочков, их тоже надо поворачивать вокруг оси а затем и вместе со столом. Изначально, как я понял, они у всех одинаковые и направлены, например в направлении (0;1). Потом по ним можно будет определить попадание капли в одну из областей.
это выполняется с помощью каких то формул?
вышло так, что дали просто лекцию....которую я никак не могу связать с данным примером, если необходимо могу предоставить.....
Vahappaday
Сообщение
#61173 21.7.2010, 14:42
1. Выбрать систему отсчёта (как я уже сказал - центр стола)
2. Записать новые координаты центров листков

//прошу прощения, тут вместо Dx, Dy должны быть Tx и Ty соответственно.
3. Для каждого листка задать вектор ориентации (0;1).
4. Повернуть каждый листок на свой угол, то есть ту формулу, что я написал выше, надо применить к векторам поворота. В качестве центра - взять координаты центра каждого листка в новой системе координат.
5. Применить ко всем точкам и ко всем векторам формулу поворота относительно точки (0; 0) (центр стола)
6. Рассчитаем новую координату точки падения капли - отнимем от x и к y по 2,5 (половина длины/ширины комнаты)
После этих 5 пунктов мы имеем записанные в одной новой системе координат с центром в середине комнаты:
а. Координаты центров листков.
б. Векторы ориентации листков.
в. Координаты падения капли
г. Размеры всех листков (естественно, никуда не поменялись)
Определить, в какую область попала точка, если вообще попала, можно из формул скалярного и векторного умножения
Пусть a - вектор ориентации, b - вектор из центра листка к координате капли. Тогда

,
где x - векторное умножение, * - скалярное - если нужно, дам формулы для двухмерного случая.
Их же используем для проверки попадания в листок, капля попала в листок, если:
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
Как-то так, будут вопросы - обращайтесь)
julia_lisha
Сообщение
#61174 21.7.2010, 15:30
большое-большое спасибо, прямо огромное, за подробное описание)
к сожалению сейчас не будет возможности иметь доступ в иннет, но 27 числа я обязательно отпишусь....так что не теряйте....и возможно появятся вопросы...
julia_lisha
Сообщение
#61219 26.7.2010, 7:24

а вот и вопросы......
начнем по пунктам:
1. (96,60)--центр стола
2.Записать новые координаты центров листков
я так поняла в формуле под x y мне брать Dxi и Dyi-(расположение центра каждого листочка на столе, относительно левого нижнего угла стола),если так, то
Цитата
x' 241
=
y' 148
это координаты для первого листочка
и т.д. до 5 листочка
3. Для каждого листка задать вектор ориентации (0;1).
я так понимаю этот пункт остается без изменения
4. Повернуть каждый листок на свой угол, то есть ту формулу, что я написал выше, надо применить к векторам поворота. В качестве центра - взять координаты центра каждого листка в новой системе координат.
формула поворот вокруг точки?
Цитата
cx, cy - центр поворота
хм...чет у меня нет таких переменных....или я просто их не вижу?!
5. Применить ко всем точкам и ко всем векторам формулу поворота относительно точки (0; 0) (центр стола)
хм или сюда формулу поворот вокруг точки?))))))
дальше пока нет смысла спрашивать, пока это все не сделанно....

заранее спасибо, жду ответа
Vahappaday
Сообщение
#61220 26.7.2010, 9:42
Потихоньку буду добавлять комментарии:
Во 2 пункте у меня ошибка, там вместо + нужен -.
Если у точки была координата 96; 60, то она должна стать 0;0, а не 192; 120
Ещё один мой недочёт - векторы поворота можно вертеть относительно любой точки. Вращаем относительно 0;0, и в 4, и в 5 пункте
Даже не относительно любой, а именно относительно 0;0))
А поскольку мы выбрали новую систему отсчёта, то и точки в 5 пункте мы будем вращать относительно 0;0.
julia_lisha
Сообщение
#61222 26.7.2010, 10:24
если заменить 2 пункт, то....
координата точки Dx1,Dy1 (145,88)
Dx1,Dy1-расположение центра каждого листочка на столе, относительно левого нижнего угла стола.
или тут надо брать (Sx1,Sy1)-(69,58) - размеры листочков по осям Х и У?!
Цитата
x' 49
=
y' 28
Цитата
Если у точки была координата 96; 60
это центр стола....
Vahappaday
Сообщение
#61223 26.7.2010, 11:36
именно так, теперь x' и y' верные
Теперь надо поворачивать. Сначала каждый листочек по отдельности, затем все вместе
Vahappaday
Сообщение
#61224 26.7.2010, 12:04
http://slil.ru/29501550 - вот расчёт первого этапа - все листочки и стол повернуты. Будет желание, можно проанализировать и падение капли)
julia_lisha
Сообщение
#61225 27.7.2010, 9:54

спасиб большое!!!
Цитата
Будет желание, можно проанализировать и падение капли
Да это уже не моя инициатива....мне просто это не обходимо это сделать....))))

и я снова жду твой помощи....
Vahappaday
Сообщение
#61227 27.7.2010, 11:17
Попробуй сама, полезней будет, будет совсем туго - посчитаю
julia_lisha
Сообщение
#61228 27.7.2010, 11:35
конечно сама

просто так на всякий случай....чтобы ты меня проверял
julia_lisha
Сообщение
#61239 30.7.2010, 13:53
Цитата
Определить, в какую область попала точка, если вообще попала, можно из формул скалярного и векторного умножения
Пусть a - вектор ориентации, b - вектор из центра листка к координате капли.
Их же используем для проверки попадания в листок, капля попала в листок, если:
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
a - вектор ориентации
мне нужно взять:
вектора ориентации после поворота листков
или
вектора ориентации после поворота стола
?
и что то с b не разберусь...эту переменную снова считать?
только пока не решай за меня,хочу сама
заранее, спасибо
Vahappaday
Сообщение
#61241 31.7.2010, 9:07
a - вектор ориентации после всех поворотов
b - это совсем не та B, что в начале. В начале у нас B - это угол поворота стола в градусах. Теперь же
Цитата
b - вектор из центра листка к координате капли
, естественно, центр листка брать после всех преобразований.
Как вычислять новые координаты капли, я написал, только отнимать там надо не по 2,5, видимо, а по 250 (будем считать, что всё остальное дано у нас в сантиметрах).
julia_lisha
Сообщение
#61243 31.7.2010, 9:40
Цитата
a - вектор ориентации после всех поворотов
о, с этим я разобралась (ВОx2, ВОy2)
Цитата
b - вектор из центра листка к координате капли
так теперь с этим, координаты капли мне известны (Cx,Cy)-(270,253)
Цитата
центр листка брать после всех преобразований.
значит после поворота стола (x2, у2)
все верно?
Vahappaday
Сообщение
#61246 31.7.2010, 15:08
Всё, кроме координат капли.
Координаты будут (20,3) - относительно центра стола и комнаты.
julia_lisha
Сообщение
#61257 3.8.2010, 10:33
а можно формулу для подсчета координаты капли?
Vahappaday
Сообщение
#61258 3.8.2010, 14:11
x'=x-250
y'=y-250
Вычитаем по половине длины и ширины комнаты
julia_lisha
Сообщение
#61262 5.8.2010, 11:57
ммм, ясно
теперь на счет формулы....
Цитата
Определить, в какую область попала точка, если вообще попала, можно из формул скалярного и векторного умножения
там две формулы COS и SIN можно брать любую?
Цитата
b - вектор из центра листка к координате капли
смотри у меня получается b это (Cx,Cy) и (x2, у2), чтобы преобразовать две переменные в одну (

надо еще какую то использовать формулу или как?
еще раз спасибо
Vahappaday
Сообщение
#61271 7.8.2010, 15:46
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
Только нужно проверить расстояние ещё.
julia_lisha
Сообщение
#61274 8.8.2010, 12:01
Я посчитала 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?
Vahappaday
Сообщение
#61307 13.8.2010, 11:20
bx, by - вроде бы такие же вышли
ABCD - верно
Скалярное умножение: a*b = ax*bx+ay*by
Векторное умножение: a*b = ax*by - bx*ay
julia_lisha
Сообщение
#61318 16.8.2010, 8:40
Цитата
У меня области расположенны так
АВ
СD
Соответствие:
A: sin>0 cos<0
B: sin>0 cos>0
C: sin<0 cos<0
D: sin<0 cos>0
почему именно так знаки а никак иначе?
a*b
-16,13519648
-3,05029232
85,46667149
11,71848325
17,05023954
aXb
40,06626058
3,621092061
-6,911322715
-5,41052212
18,93622435
Цитата
Их же используем для проверки попадания в листок, капля попала в листок, если:
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
теперь этими формулами пользоваться?
Vahappaday
Сообщение
#61443 4.9.2010, 17:21
акутально ещё? просто на юге был...
julia_lisha
Сообщение
#61460 5.9.2010, 9:43
конечно актуально)))))
Vahappaday
Сообщение
#61475 5.9.2010, 14:33
Эх... опять немножко с синусами/косинусами облажался...
Всё было верно, если бы у нас вектор ориентации изначальный был (1;0)
А так... Получается немного иначе...
У меня области расположенны так
АВ
СD
Соответствие:
A: sin>0 cos>0
B: sin<0 cos>0
C: sin>0 cos<0
D: sin<0 cos<0
Советую проверить, эти вот выводы берутся из свойств синуса и косинуса.
Кстати, формула для проверки попадания почему-то верная... Наверное, я их в разное время выводил...
Да, дальше использовать её.
julia_lisha
Сообщение
#61483 6.9.2010, 3:25
Цитата
Эх... опять немножко с синусами/косинусами облажался...
че где то ошибка???
Vahappaday
Сообщение
#61485 6.9.2010, 10:11
Да, я написал как правильно по-новому
julia_lisha
Сообщение
#61486 6.9.2010, 10:45
то есть изменили только вектор ориентации и соответсвие?
julia_lisha
Сообщение
#61487 6.9.2010, 11:20
Цитата
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
b (вектор из центра листка к координате капли) такого наименования брать?
и что значит В?
спасиб, что все еще помогаешь
Vahappaday
Сообщение
#61488 6.9.2010, 12:45
и то, и другое b - вектор из центра на каплю. Только в sin и cos - там вектор, я указал раньше, как считать. А снаружи b, на которое мы домножаем синус и косинус, получается модуль этого вектора.
julia_lisha
Сообщение
#61489 6.9.2010, 13:13
получается так
bх*(ax*bx+ay*by)
bу*(ax*bx+ay*by)
bх*(ax*by - bx*ay)
bу*(ax*by - bx*ay)
???
Vahappaday
Сообщение
#61491 6.9.2010, 13:54
вовсе нет. Забыла про знаменатели косинуса и синуса...
julia_lisha
Сообщение
#61492 6.9.2010, 14:23
ааа блин это что я не полностью формулу сделала...
извини у меня чет не получается сюда картинки вставлять
ты мне в 4 сообщение формулы дал косинус и синус там....
потом написал скалярное и векторно произведение:
Цитата
Скалярное умножение: a*b = ax*bx+ay*by
Векторное умножение: a*b = ax*by - bx*ay
получается тут тоже потерянны синус и косинус?
Vahappaday
Сообщение
#61493 6.9.2010, 15:11
нет, тут всё ок, но только как раз через эти произведения я предлагал вычислить синус и косинус.
julia_lisha
Сообщение
#61501 7.9.2010, 13:04
Цитата(Vahappaday @ 6.9.2010, 13:54)

Забыла про знаменатели косинуса и синуса...
а где там знаменатели в формуле?
Vahappaday
Сообщение
#61513 7.9.2010, 19:54
Цитата(Vahappaday @ 21.7.2010, 18:42)


,
В знаменателе, как видно, произведение модулей векторов.
julia_lisha
Сообщение
#61522 8.9.2010, 11:42
Цитата
В знаменателе, как видно, произведение модулей векторов.
получается знаменатель это скалярное умножение при модуле, так?
блин капец какое задание, мне уже стыдно, что я так долго над ним сижу.........
Vahappaday
Сообщение
#61527 8.9.2010, 12:49
не скалярное умножение векторов...
Скалярное умножение модулей....
(может, ты об этом и говорила, конечно ))) ) Но на всякий случай вот пример:
например, 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
tig81
Сообщение
#61534 8.9.2010, 13:19
Цитата(Vahappaday @ 8.9.2010, 15:49)

скалярное умножение a*b=3*4+4*3=24
скалярное призведение
julia_lisha
Сообщение
#61536 8.9.2010, 13:34
пример оч нужный)
у меня выражение: |a|*|b|
теперь смотри мне надо сначало:
1. скалярное призведение
2. умножение модулей
Цитата
|a|=|b|=корень(3^2+4^2)=корень(25)=5
почему |a|=|b|?
tig81
Сообщение
#61539 8.9.2010, 13:47
Цитата(julia_lisha @ 8.9.2010, 16:34)

почему |a|=|b|?
потому что от перестановки слагаемых сумма не меняется.

А длины векторов равны соответственно sqrt(3^2+4^2) и sqrt(4^2+3^2)
julia_lisha
Сообщение
#61544 8.9.2010, 14:29
о, все!!! я почитала геметрию все нашла)))))) спасибо вам!
tig81
Сообщение
#61546 8.9.2010, 14:34
julia_lisha
Сообщение
#61549 8.9.2010, 15:02
посчитала
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
теперь с этими формулами работать или что то еще необходимо сделать?
кстати ответ выглядит т.о.: 1(А)-2(В)-4(D)-3©-5(A)
мы на правильном пути?
Vahappaday
Сообщение
#61561 8.9.2010, 17:25
Хм.. ответ? Не знаю ответа...)))
Но вот эти вот два столбца - уже не произведения, а косинусы и синусы соответственно. Сначала косинусы, потом синусы.
Теперь нужно проверить, попала ли она в листок, или нет. Попадает, когда
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
Если попала, то по знаку синуса и косинуса определяем четверть.
julia_lisha
Сообщение
#61616 11.9.2010, 13:09
b*sin(a^B ) <= Sx
b*cos(a^B ) <= Sy
а какую b необходимо брать?
Vahappaday
Сообщение
#61631 11.9.2010, 16:08
ух)) чем дальше, тем сложнее вспоминать)))
а b - у нас вроде как один для каждого листочка, или я не прав?
Единственное что добавлю, b и B - в данном случае одно и то же)))
julia_lisha
Сообщение
#61640 12.9.2010, 8:52
sin(a^B ) и cos(a^B ) уже посчитанны.
Sx и Sy даны в задании.
b - у нас вроде как один для каждого листочка
есть b в задание это поворот стола на угол.
или брать
b - вектор из центра листка к координате капли
не могу понять...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.