forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   BlitzMax (http://forum.boolean.name/forumdisplay.php?f=104)
-   -   Вопрос-Ответ (для новичков BlitzMax) (http://forum.boolean.name/showthread.php?t=13756)

Greymem 30.11.2011 09:56

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Вопрос по геометрии:
http://forum.boolean.name/showthread...751#post211751

Решение найдено
Код:

Function RotateAroundOrigin(X:Float Var, Y:Float Var, ox:Float, oy:Float, a:Int)
        Local DX:Float = X - ox
        Local DY:Float = Y - oy
        Local angdiff:Float = ATan2(DX, DY)
        Local dist:Float = Sqr(DX * DX + DY * DY)
        Local s:Float = Sin(a + angdiff)
        Local c:Float = Cos(a + angdiff)
        Local tx:Float = (dist * s)
        Local ty:Float = (dist * c)
        x = tx + ox
        y = ty + oy
        Return
End Function

Graphics 800, 600

Global oX:Float = 400
Global oY:Float = 300

Global offsetx:Int = 10;
Global Offsety:Int = 20;
Global rX:Float = oX + offsetx
Global rY:Float = oY + Offsety
Global a:Float = 1

While Not KeyHit(KEY_ESCAPE)
        RotateAroundOrigin(rX, rY, ox, oy, a)
        Plot rX, rY
        Plot ox, oy
       
        If KeyHit(KEY_RIGHT)
                ox:+100;
                rX:Float = ox + offsetx
                rY:Float = oy + Offsety
        ElseIf KeyHit(KEY_LEFT)
                ox:-100;
                rX:Float = ox + offsetx
                rY:Float = oy + Offsety
        ElseIf KeyHit(KEY_UP)
                offsetx:+10;
                Offsety:+10;
                rX:Float = ox + offsetx
                rY:Float = oy + Offsety
        ElseIf KeyHit(KEY_DOWN)
                offsetx:-10;
                Offsety:-10;
                rX:Float = ox + offsetx
                rY:Float = oy + Offsety
        EndIf;
       
       
       
        Flip
Wend
End

Источник http://www.blitzbasic.com/Community/...hp?topic=88294
Но немножко переделал под изменение координат опорной точки

SBJoker 30.11.2011 10:58

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Это есть в стандартном функционале.

Greymem 30.11.2011 11:00

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от SBJoker (Сообщение 211754)
Это есть в стандартном функционале.

Хммм... и как называется функция?

Dzirt 30.11.2011 14:03

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Тему не читай, а сами знаете что....

Atan2()

Greymem 30.11.2011 14:30

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Цитата:

Сообщение от Dzirt (Сообщение 211759)
Тему не читай, а сами знаете что....

Atan2()

Ваш речевой оборот убивает клетки моего мозга.
Уточните, что вы хотели этим всем сказать?

SBJoker 30.11.2011 15:04

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Я уже вам ответил: http://forum.boolean.name/showpost.p...3&postcount=17

dimanche13 30.11.2011 15:39

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Сдается мне, ему не нужны намеки, ему нужен код.

Greymem 30.11.2011 15:42

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Нетъ и еще раз нетъ =)
Кое до чего я могу дойти сам
Брать SetImageHandle и задавать xy с минусом?

SBJoker 30.11.2011 15:50

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
именно так, на столько сколько нехватает до требуемой точки на экране.

Greymem 30.11.2011 15:51

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Есть вопрос, как узнать сколько мне нехватает до этой точки? =)
Если известна только координата этой точки XY

SBJoker 30.11.2011 17:20

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
ну смотри, если ты картинку желаешь рисовать в 200, 300
то до начала координат тебе получается -200, -300 так?
Это уже вращение вокруг начала координат получается.

Значит точка_назначения(x,y) - точка_нахождения_картинки(x,y) = смещение_handle_картинки(x,y)

т.е. из координат требуемой точки вращения вычитаем координаты положения видимой части картинки, т.е. если бы у неё был неизмененный хэндл.

Greymem 01.12.2011 08:49

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Хммм, а изначально для той картинки которую хочу вращать вокруг точки которой нет на картинке, Handle куда устанавливать то? =)

SBJoker 01.12.2011 10:43

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Никуда, он и так изначально в 0,0

Greymem 02.12.2011 08:46

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
А если мне помимо поворота вокруг произвольной точки, нужно еще и по своей оси потом повернуть?

SBJoker 02.12.2011 10:48

Ответ: Вопрос-Ответ (для новичков BlitzMax)
 
Тога придётся напрячь штуки из вашей подписи.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot