Ir ao conteúdo
  • Cadastre-se

Cambalinho

Membro Pleno
  • Posts

    942
  • Cadastrado em

  • Última visita

Tudo que Cambalinho postou

  1. sabendo a origem e o destino da recta: OX, OY, OZ = 100, 20, 200 DX, DY, DZ = 200, 40, 400 sabendo a origem e o destino, como posso percorrer 1 recta usando 1 ciclo? eu não posso fazer: X = X + 1 Y = Y + 1 Z = Z +1 porque a distancia de Z ou Y pode ser diferente de X
  2. eu tenho este codigo para desenhar 1 plano na tela: Private Function Rotate(Position As Position3D, Rotation As Angle3D, PositionRotated As Position3D) As Position3D Dim ConvertedPosition As Position3D Dim RotationInRads As Angle3D 'Convert degrees to Radians 'Rotation works on Radians RotationInRads = ConvertDegreesToRadians(Rotation) 'Convert the actual position to zero, using the rotation position: ConvertedPosition = Position ConvertedPosition.X = Position.X - PositionRotated.X ConvertedPosition.Y = -(PositionRotated.Y - Position.Y) 'reversed because Y increments down ConvertedPosition.Z = Position.Z - PositionRotated.Z 'Rotate the position, but the Z axis must be the 1st: Dim T As Position3D 'Z axis (Roll) T = ConvertedPosition ConvertedPosition.X = T.X * Cos(RotationInRads.Z) - T.Y * Sin(RotationInRads.Z) ConvertedPosition.Y = T.X * Sin(RotationInRads.Z) + T.Y * Cos(RotationInRads.Z) 'X axis (Pitch) T = ConvertedPosition ConvertedPosition.Y = T.Y * Cos(RotationInRads.X) - T.Z * Sin(RotationInRads.X) ConvertedPosition.Z = T.Y * Sin(RotationInRads.X) + T.Z * Cos(RotationInRads.X) 'Y axis (Yaw) T = ConvertedPosition ConvertedPosition.X = T.Z * Sin(RotationInRads.Y) + T.X * Cos(RotationInRads.Y) ConvertedPosition.Z = T.Z * Cos(RotationInRads.Y) - T.X * Sin(RotationInRads.Y) 'Convert to the rotated original position: ConvertedPosition.X = ConvertedPosition.X + PositionRotated.X ConvertedPosition.Y = ConvertedPosition.Y + PositionRotated.Y ConvertedPosition.Z = ConvertedPosition.Z + PositionRotated.Z 'Convert to Camera Coordinates\Position: 'ConvertedPosition.X = ConvertedPosition.X - Player1.Position.X 'ConvertedPosition.Y = ConvertedPosition.Y - Player1.Position.Y 'ConvertedPosition.Z = ConvertedPosition.Z - Player1.Position.Z Rotate = ConvertedPosition End Function Private Function ConvertPositon3DTo2D(Position As Position3D, World3DSize As Size3D) As POINTAPI Dim ConvertedPosition As POINTAPI Dim PosZZDepth As Long PosZZDepth = Position.Z + World3DSize.Distance If (PosZZDepth = 0) Then PosZZDepth = 1 'avoiding division by zero Dim Width As Double Dim Height As Double Width = World3DSize.Width / 2 If (Width = 0) Then Width = 0 Height = World3DSize.Height / 2 If (Height = 0) Then Height = 0 ConvertedPosition.X = (Position.X * World3DSize.Distance / PosZZDepth) + Width ConvertedPosition.Y = (Position.Y * World3DSize.Distance / PosZZDepth) + Height ConvertPositon3DTo2D = ConvertedPosition End Function Private Function IsOnCamera(VerticePosition As Position3D, CameraPosition As Position3D, CameraSize As Size3D) As Boolean If ((VerticePosition.Z) >= CameraPosition.Z And VerticePosition.Z <= (CameraPosition.Z + CameraSize.ZDepth) _ And ((VerticePosition.Y) >= CameraPosition.Y And VerticePosition.Y <= (CameraPosition.Y + CameraSize.Height))) Then 'And ((VerticePosition.X) >= CameraPosition.X And VerticePosition.X <= (CameraPosition.X + CameraSize.Width))) Then Me.Caption = CStr(CameraPosition.X) IsOnCamera = True Else IsOnCamera = False End If End Function Private Sub DrawPlane(Position As Position3D, Size As Size3D, Rotation As Angle3D, WorldSize As Size3D) Dim Points(4) As POINTAPI Dim NewPoint As POINTAPI Dim NewPosition3D As Position3D Dim RotatedPosition As Position3D Dim DestinyPosition As Position3D Static FixedPoint0(4) As Position3D Dim sizeD As Size3D Dim temp As Double FillSize3D sizeD, 0, 0, 0 'FillPosition3D RotatedPosition, Position.X + Size.Width / 2, Position.Y + Size.Height / 2, Position.Z + Size.ZDepth / 2 With Player1.Position FillPosition3D RotatedPosition, .X, .Y, .Z 'Camera Position End With If (IsCollision3D(camera1.Position, camera1.Size, Position, Size) = False) Then Exit Sub 'Floor: 'Vector1 FillPosition3D NewPosition3D, Position.X, Position.Y, Position.Z NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition) If (IsOnCamera(NewPosition3D, camera1.Position, camera1.Size) = True) Then FixedPoint0(0) = NewPosition3D Else NewPosition3D = FixedPoint0(0) End If NewPoint = ConvertPositon3DTo2D(NewPosition3D, camera1.Size) Points(0) = NewPoint 'Vector2 FillPosition3D NewPosition3D, Position.X, Position.Y, Position.Z + Size.ZDepth NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition) If (IsOnCamera(NewPosition3D, camera1.Position, camera1.Size) = True) Then FixedPoint0(1) = NewPosition3D Else NewPosition3D = FixedPoint0(1) End If NewPoint = ConvertPositon3DTo2D(NewPosition3D, camera1.Size) Points(1) = NewPoint 'Vector3 FillPosition3D NewPosition3D, Position.X + Size.Width, Position.Y, Position.Z + Size.ZDepth NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition) If (IsOnCamera(NewPosition3D, camera1.Position, camera1.Size) = True) Then FixedPoint0(2) = NewPosition3D Else NewPosition3D = FixedPoint0(2) End If NewPoint = ConvertPositon3DTo2D(NewPosition3D, camera1.Size) Points(2) = NewPoint 'Vector4 FillPosition3D NewPosition3D, Position.X + Size.Width, Position.Y + Size.Height, Position.Z NewPosition3D = Rotate(NewPosition3D, Rotation, RotatedPosition) If (IsOnCamera(NewPosition3D, camera1.Position, camera1.Size) = True) Then FixedPoint0(3) = NewPosition3D Else NewPosition3D = FixedPoint0(3) End If NewPoint = ConvertPositon3DTo2D(NewPosition3D, camera1.Size) Points(3) = NewPoint FillStyle = vbFSSolid FillColor = vbRed Polygon Me.hdc, Points(0), 4 End Sub o plano é desenhado, mas ao alterar a rotação, o plano é desenhado de forma errada.. isso acontece porque fica fora da janela\camera. eu tentei adicionar o 'X' na função 'IsOnCamera()', mas o plano nem é desenhado na tela. o meu problema é evitar desenhar as linhas que ficam for da camera... ok... 1 plano não pode perder as 4 linhas, mas ao diminuir o comprimento(consoante o tamanho da camera), já dá. a minha ideia parece boa, mas pode consumir muito o CPU se desenhar muitos planos e cubos(6 planos).. alguém me pode explicar mais alguma coisa?
  3. muitas das vezes quando executo o BizHawk 2.4.2 e escolho o jogo, os controles ficam sem efeito... eu não sei o causa este erro\bug.. alguém me consegue explicar? Moderador: tirar 1 duvida de 1 emulador(falo do emulador, que é livre, e não de 1 jogo), é considerado pirataria?
  4. visual não sei, o que sei é que quando abro o WMP, em modo máscara, só consigo controlar o volume... depois volto á biblioteca para fazer play na lista de reprodução anterior. além disso as oficiais dão o mesmo problema adicionado 19 minutos depois Nota: eu uso o skin para obter 1 barra pequena só com os controles
  5. eu não meti versão no Windows, porque noto este problema noutras versões. o Windows Media Player tem várias skins\mascaras. imagine fechar a janela enquanto está a ouvir música, sem mascara(Biblioteca), e depois volta abrir... o botão Play está activo.. mas se fechar, da mesma forma, mas com máscara, e voltar abrir, porque o botão play fica desactivado? (eu fiz o teste... se voltar á Biblioteca(quando uso a máscara), o botão esta activado) ou seja, este erro\bug só acontece na mascara\skin
  6. T1000_2015: como posso evitar a divisão por zero? eu posso fazer isto: If (WhatCoordenate = X) Then 'P.x = O.x + t*AB.x 't = (P.x - O.x) / AB.x if(AB.x=0) then T=1 else T = (ActualPosition - Origin.X) / AB.X end if eu meti igual a '1', mas neste caso, o que devo meter?
  7. esta função tem alguns erros de calculos, mas já a editei: Private Function GetLinePosition(Origin As Position3D, Destiny As Position3D, ActualPosition As Double, Optional WhatCoordenate As Coordenates = Z) As Position3D 'Getting the AB vector(B-A or Destiny-Origin): Dim AB As Position3D AB.X = Destiny.X - Origin.X AB.Y = Destiny.Y - Origin.Y AB.Z = Destiny.Z - Origin.Z Dim NewPosition As Position3D Dim T As Double 'depending on player movement(for get 1 coordenate and the T), we get the point coordenate: If (WhatCoordenate = X) Then 'P.x = O.x + t*AB.x 't = (P.x - O.x) / AB.x T = (ActualPosition - Origin.X) / AB.X NewPosition.X = ActualPosition NewPosition.Y = Origin.Y + AB.Y * T NewPosition.Z = Origin.Z + AB.Z * T ElseIf (WhatCoordenate = Y) Then 'P.y = O.y + t*AB.y 't = (P.y - O.y) / AB.y T = (ActualPosition - Origin.Y) / AB.Y NewPosition.Y = ActualPosition NewPosition.X = Origin.X + AB.X * T NewPosition.Z = Origin.Z + AB.Z * T ElseIf (WhatCoordenate = Z) Then 'P.z = O.z + t*AB.z 't = (P.z - O.z) / AB.z T = (ActualPosition - Origin.Z) / AB.Z NewPosition.Z = ActualPosition NewPosition.X = Origin.X + AB.X * T NewPosition.Y = Origin.Y + AB.Y * T End If GetLinePosition = NewPosition End Function muito obrigado
  8. finalmente consegui criar 1 função em VB6 para calcular o ponto da recta: Private Function GetLinePosition(Origin As Position3D, Destiny As Position3D, ActualPosition As Double, Optional WhatCoordenate As Coordenates = Z) As Position3D 'Getting the AB vector(B-A or Destiny-Origin): Dim AB As Position3D AB.X = Destiny.X - Origin.X AB.Y = Destiny.Y - Origin.Y AB.Z = Destiny.Z - Origin.Z Dim NewPosition As Position3D Dim T As Double 'depending on player movement(for get 1 coordenate and the T), we get the point coordenate: If (WhatCoordenate = X) Then 'X = Ax + T 'T = Ax-X T = Origin.X - ActualPosition NewPosition.X = ActualPosition NewPosition.Y = Origin.Y + AB.Y * T NewPosition.Z = Origin.Z + AB.Z * T ElseIf (WhatCoordenate = Y) Then 'Y = Ay + T 'T = Ay-Y T = Origin.Y - ActualPosition NewPosition.Y = ActualPosition NewPosition.X = Origin.X + AB.X * T NewPosition.Z = Origin.Z + AB.Z * T ElseIf (WhatCoordenate = Z) Then 'Z = Az + T 'T = Az-Z T = Origin.Z - ActualPosition NewPosition.Z = ActualPosition NewPosition.X = Origin.X + AB.X * T NewPosition.Y = Origin.Y + AB.Y * T End If GetLinePosition = NewPosition End Function o X, Y ou Z são obtidos dependendo do movimento do jogador(esquerda-direita ou atrás e frente). eu não tenho como testar esta função se está correcta... só obtenho os resultados quando a figura é desenhada. eu obtenho resultados inesperados... podes me tentar ver a função para ver se me enganei?
  9. eu tenho 1 função para detectar a colisão 3D: Private Function IsCollision3D(ObjectPosition1 As Position3D, ObjectSize1 As Size3D, ObjectPosition2 As Position3D, ObjectSize2 As Size3D) IsCollision3D = ((ObjectPosition1.X <= (ObjectPosition2.X + ObjectSize2.Width)) And ((ObjectPosition1.X + ObjectSize1.Width) >= ObjectPosition2.X) And (ObjectPosition1.Y <= (ObjectPosition2.Y + ObjectSize2.Height)) And ((ObjectPosition1.Y + ObjectSize1.Height) >= ObjectPosition2.Y) And (ObjectPosition1.Z <= (ObjectPosition2.Z + ObjectSize2.ZDepth)) And ((ObjectPosition1.Z + ObjectSize1.ZDepth) >= ObjectPosition2.Z)) End Function e parece funcionar bem. a partir desta função eu criei 1 função para detectar se um ponto esta dentro da camera: Private Function IsCollisionVertice3D(Vertice1 As Position3D, ObjectPosition2 As Position3D, ObjectSize2 As Size3D) IsCollisionVertice3D = ((Vertice1.X <= (ObjectPosition2.X + ObjectSize2.Width)) And ((Vertice1.X) >= ObjectPosition2.X) And (Vertice1.Y <= (ObjectPosition2.Y + ObjectSize2.Height)) And ((Vertice1.Y) >= ObjectPosition2.Y) And (Vertice1.Z <= (ObjectPosition2.Z + ObjectSize2.ZDepth)) And ((Vertice1.Z) >= ObjectPosition2.Z)) End Function As funções IsCollisionVertice3D() e IsCollision3D() estão correctas? Private Type Position3D X As Double Y As Double Z As Double End Type Private Type Size3D width As Double height As Double ZDepth As Double End Type
  10. T1000_2015 já vi que o 'T' é uma espécie de ID da Recta. me corrige 1 coisa: se o Z for zero ou igual entre o ponto AB é como fosse uma recta 2D?
  11. desculpa, mas eu só tenho o 12º ano... e talvez tenha razão.... além disso estou com dificuldade em acompanhar o manual... a 2D percebo bem... mas a 3D ainda me deixa confuso: o que é o 't'? adicionado 31 minutos depois muito obrigado pelos manuais.. e com a sua ajuda consegui fazer a pesquisa certa e encontrei 1 video que me ajuda e muito: muito obrigado por tudo
  12. muito obrigado. mas me falta 1 informação: "Definiremos as coordenadas dos pontos pertencentes à reta por meio das incógnitas x e y (se a reta pertencer a um espaço de duas dimensões), que se relacionam entre si pela equação. Caso a equação pertença a um espaço de três dimensões, usaremos as incógnitas x, y e z." qual é a forma de obter a equação em 3D?
  13. desculpa, mas não sei obter essa equação a partir da origem e destino
  14. imagine que a linha começa em (0,0) e acaba em (100,50). se estiver na posição, do X, 50... como posso calcular o Y?
  15. isso poderia ser 1 codigo, mas eu demonstro como pseucodigo para outros entenderem... e não uso 1 libraria... eu consigo rodar agora(vou mostrar codigo VB6): Private Function Rotate(Position As Position3D, Rotation As Angle3D, PositionRotated As Position3D) As Position3D Dim ConvertedPosition As Position3D Dim RotationInRads As Angle3D RotationInRads = ConvertDegreesToRadians(Rotation) ConvertedPosition = Position If (Rotation.X <> 0) Then ConvertedPosition.Y = (Position.Y - PositionRotated.Y) * Cos(RotationInRads.X) - (Position.Z - PositionRotated.Z) * Sin(RotationInRads.X) ConvertedPosition.Z = (Position.Y - PositionRotated.Y) * Sin(RotationInRads.X) + (Position.Z - PositionRotated.Z) * Cos(RotationInRads.X) End If If (Rotation.Y <> 0) Then ConvertedPosition.X = (Position.Z - PositionRotated.Z) * Sin(RotationInRads.Y) + (Position.Z - PositionRotated.Z) * Cos(RotationInRads.Y) ConvertedPosition.Z = (Position.Z - PositionRotated.Z) * Cos(RotationInRads.Y) - (Position.Z - PositionRotated.Z) * Sin(RotationInRads.Y) End If If (Rotation.Z <> 0) Then ConvertedPosition.X = (Position.X - PositionRotated.X) * Cos(RotationInRads.Z) - (Position.Y - PositionRotated.Y) * Sin(RotationInRads.Z) ConvertedPosition.Y = (Position.X - PositionRotated.X) * Sin(RotationInRads.Z) + (Position.Y - PositionRotated.Y) * Cos(RotationInRads.Z) End If ConvertedPosition.X = ConvertedPosition.X + Position.X ConvertedPosition.Y = ConvertedPosition.Y + Position.Y ConvertedPosition.Z = ConvertedPosition.Z + Position.Z Rotate = ConvertedPosition End Function '........... Private Sub FillPosition3D(Position As Position3D, X As Long, Y As Long, Z As Long) Position.X = X Position.Y = Y Position.Z = Z End Sub '............ FillPosition3D RotatedPosition, Position.X + Size.Width / 2, Position.Y + Size.Height / 2, Position.Z + Size.ZDepth / 2 mas agora noto alguns problemas: 1 - a rotação Z funciona correctamente, mas altera a escala do rectangulo; 2 - o X, Y fazem rotação sem o centro
  16. imagine que temos 1 rectangulo com: x=10 Y= 20 Z = 0 comprimento = 10 altura = 10 para rodar o rectangulo temos de rodar os 4 vertices: X = (Position.Z) * Sin(RotationInRads.Y) + (Position.X ) * Cos(RotationInRads.Y) Y = (Position.Y) * Cos(RotationInRads.X) - (Position.Z ) * Sin(RotationInRads.X) Z = (Position.Y) * Sin(RotationInRads.X) + (Position.Z ) * Cos(RotationInRads.X) pelo que aprendi eu tenho de adicionar o centro do rectangulo ás posições: X = (Position.Z+ ZDepth/2) * Sin(RotationInRads.Y) + (Position.X+Width/2 ) * Cos(RotationInRads.Y) Y = (Position.Y+Height/2) * Cos(RotationInRads.X) - (Position.Z+ ZDepth/2 ) * Sin(RotationInRads.X) Z = (Position.Y+Height/2) * Sin(RotationInRads.X) + (Position.Z+Height/2 ) * Cos(RotationInRads.X) mas o problema é que a rotação ainda é feita em torno de circulo e não na mesma posição o que estou a fazer mal nos calculos?
  17. muito obrigado. eu já consegui instalar o Visual Studio 6.0... mas além desse link, eu tenho mais 1 dica: - a 1ª instalação temos de fazer com o minimo possivel de recursos VB6 e mais pouca coisa... depois disso voltamos ao instalador e selecionamos mais do que precisamos e ficamos com tudo ou quase tudo instalado e assim reiniciamos o pc para instalar o SP6. muito obrigado e boa Páscoa
  18. já tentei várias vezes instalar o Visual Studio 6.0. até desmarquei algumas funções, mas no fim da instalação, por e simplesmente, o Setup freeze e no titulo da janela fica "Não responde". tentei usar o instalador do vbcorner, mas ele pensa que o Visual Studio 6.0 está instalado. e quando copia os ficheiros diz 'aborted', mas eu não cancelei!!!! usei o instalador feito no Inno Setup e funciona, mas só tem o Visual Basic e eu também queria o Visual C++. ontem andei durante horas e sem sucesso para instalar o Visual Studio 6.0 no Windows 10... alguém me pode ajudar mais 1 pouco?
  19. estou a tentar desenhar 1 cenário 3D, mas ainda tenho problemas. ou menos aprendi como transformar 3D em 2D(pois o ecra só usa X, Y). x2D = (x * L) / (z + L) y2D = (y * L) / (z + L) em que o 'L', pelo que entendi, é a distancia entre a camera\jogador e o objecto. consegui desenhar 1 rectângulo(4 pontos) que altera o tamanho. agora estou a tentar desenhar o chão(simples para testar), mas nem aparece e ainda não entendi o motivo: //Posição e Tamanho do Chão: int FloorX=0, FloorY=1000, FloorZ=0,FloorWidth=1000, FloorHeight=100, FloorZWidth=1000; //Conjunto de Pontos para Desenhar o Chão: POINT FloorPoints[5] = { { (FloorX * MeDistance) / (FloorZ + MeDistance), (FloorY * MeDistance) / (FloorZ + MeDistance) }, { FloorWidth+FloorX, (FloorY * MeDistance) / (FloorZ + MeDistance) }, { FloorWidth+FloorX, FloorHeight+FloorY }, { (FloorX * MeDistance) / (FloorZ + MeDistance), FloorHeight+FloorY }, { (FloorX * MeDistance) / (FloorZ + MeDistance), (FloorY * MeDistance) / (FloorZ + MeDistance) }, }; //A Cor de Chão: HBRUSH hBrush12 = CreateSolidBrush(RGB(0, 0, 255)); HBRUSH holdBrush2 = (HBRUSH)SelectObject(Console, hBrush12); //Desenhar o Chão com os Pontos: Polygon(Console, FloorPoints, 5); SelectObject(Console, holdBrush2 ); DeleteObject(hBrush12); Console class: class Console { public: HWND myconsole; HDC mydc; Console() { myconsole = GetConsoleWindow(); //Get a handle to device context mydc = GetDC(myconsole); } ~Console() { ReleaseDC(myconsole, mydc); } operator HDC() { return mydc; } operator HWND() { return myconsole; } RECT GetWindowSize() { RECT RectWindow; GetWindowRect(myconsole,&RectWindow); return RectWindow; } }Console; o que noto é que o chão não aparece e eu nem entendo o motivo. alguém me pode explicar melhor como posso desenhar o chão ou outro objecto?
  20. fui obrigado a desactivar o serviço para poder usar o pc normalmente... á manha ja devo ter a mensagem de água para Activar o Windows
  21. mas não estou a usar nada em que possa apanhar malwares.... de X em X tempo o serviço fica em funcionamento, mesmo com o Antivirus desligado. penso que esse serviço tem haver com Direitos Autorais ou isso
  22. "Tire da rede o note e não custa pausar o Defender para ver o comportamento." "tire da rede..." o que quer dizer? sim posso testar desactivando o Windows Defender
  23. eu uso o Windows Defender... e esse serviço parace ser do SO e não do Antivirus
  24. se isso é 1 serviço da Microsoft e só notei mais tarde... então deve ter vindo de alguma actualização

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!