Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Поворот картинки Добавлено: 30.04.05 18:12  

Автор вопроса:  Yeputons | ICQ: 278444762 

Ответить

  Ответы Всего ответов: 25  

Номер ответа: 16
Автор ответа:
 Yeputons



ICQ: 278444762 

Вопросов: 71
Ответов: 179
 Профиль | | #16 Добавлено: 02.05.05 15:08
Заработало! Но не совсем. Каких-то дробей до истинного значения не хватает.

Ответить

Номер ответа: 17
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #17
Добавлено: 02.05.05 16:32
Может некоторые переменные вместо Integer надо объявить как Double?
У меня тоже в этом баг был пару раз

Ответить

Номер ответа: 18
Автор ответа:
 Yeputons



ICQ: 278444762 

Вопросов: 71
Ответов: 179
 Профиль | | #18 Добавлено: 02.05.05 19:33
Я их как Double объявляю.

Ответить

Номер ответа: 19
Автор ответа:
 Yeputons



ICQ: 278444762 

Вопросов: 71
Ответов: 179
 Профиль | | #19 Добавлено: 02.05.05 19:33
Я их как Double объявляю.

Ответить

Номер ответа: 20
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #20 Добавлено: 02.05.05 22:48
Может, нужно число пи точнее определить?

А я забацал супершустрый алгоритм, вращающий картинку. Мож кому-нибудь понадобится. Выдает на моем компе 154 кадра в секунду в окне 640x480. И это не потому, что у меня мощный камень. Выглядит он так:


Sub DrawFrameRotate()
Dim XVX&, XVY&, YVX&, YVY&, CX&, CY&, SX&, SY&, TX&, TY&, X&, Y&, A!, S!, C!
ZeroMemory pict(0, 0), 307200
A = F / 50
S = Sin(A)
C = Cos(A)
SX = Int((320 + (240 * C - 320 * S)) * 65536)
SY = Int((240 - (320 * C + 240 * S)) * 65536)
XVX = Int(65536 * S)
XVY = Int(-65536 * C)
YVX = Int(65536 * C)
YVY = Int(65536 * S)
For Y = 0 To 479
  CX = SX
  CY = SY
  For X = 0 To 639
    TX = CX \ 65536
    TY = CY \ 65536
    If TX >= 0 Then
      If TX < 640 Then
        If TY >= 0 Then
          If TY < 480 Then
            pict(X, Y) = fxb(TX, TY)
          End If
        End If
      End If
    End If
    CX = CX + XVX
    CY = CY + YVX
  Next
  SX = SX + XVY
  SY = SY + YVY
Next
RenderString 5, 464, CStr(SP) & " fps", False, False, 0
RenderString 4, 465, CStr(SP) & " fps", False, False, 255
Me.Refresh
End Sub


fxb - байтовый массив, содержащий вращаемую картинку.
pict - байтовый массив, выводимый на экран.
Ессно, работает алгоритм с 256-цветным изображением. Но можно сделать и полноцветное. Если нужна прога целиком - могу отослать ее админу, чтобы он выложил в коллекцию примеров.

Ответить

Номер ответа: 21
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #21
Добавлено: 02.05.05 23:51
2Страшный Сон
Это на VB6? Нифига! только я не понял, откуда берсётся картинка и куда выводится... не выложишь исходник?

Ответить

Номер ответа: 22
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #22 Добавлено: 03.05.05 16:24
Ну... Пока исходник слишком сырой, но немного позже, наверное, выложу.

Ответить

Номер ответа: 23
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #23 Добавлено: 03.05.05 16:25
Кстати, это еще не предел! Еще разика в два-три ускорить можно.

Ответить

Номер ответа: 24
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #24
Добавлено: 03.05.05 16:47
Просто я не доврубаюсь, какие-то функции странные типа RenderString, ZeroMemory - это стандартный бейсиковские? или это смесь АПИ с DX?

Ответить

Номер ответа: 25
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #25 Добавлено: 04.05.05 15:00
Исходник доделаю, врубишься. Только боюсь, что из затеи с дополнительной оптимизацией алгоритма ничего хорошего не получится. В лучшем случае алгоритм раздуется в несколько раз, а скорость работы увеличится лишь ненамного.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам