Ir ao conteúdo

Posts recomendados

Postado

 como desenhar 1 linha usando o método BresenhamLine, angulo e comprimento maximo e o mapa para 3D(RayCasting)?

Public Sub BresenhamLine(X1 As Long, Y1 As Long, X2 As Long, Y2 As Long, ByRef Map() As Long, ObjectSize As Long)
    Dim dx As Long
    Dim dy As Long
    Dim stepX As Long
    Dim stepY As Long
    Dim p As Long
    Dim MapX As Long
    Dim MapY As Long
    
    Dim x As Long
    Dim y As Long

  
    dx = Abs(X2 - X1)
    dy = Abs(Y2 - Y1)
    
    If X1 < X2 Then
        stepX = 1
    Else
        stepX = -1
    End If
    
    If Y1 < Y2 Then
        stepY = 1
    Else
        stepY = -1
    End If
    
    x = X1
    y = Y1
    
    'If (Map(Fix(x / ObjectSize), Fix(y / ObjectSize)) = 1) Then End Sub
        
    
    If dx > dy Then
        
        p = 2 * dy - dx
        
        Do While x <> X2
        
            If p >= 0 Then
                y = y + stepY
                p = p - 2 * dx
            End If
            
            x = x + stepX
            p = p + 2 * dy
            
            
            If (Map(Int(x / ObjectSize), Int(y / ObjectSize)) = 1) Then
                ForeColor vbBlack
                DrawLine X1, Y1, X2, Y2
                Exit Sub
           End If
        Loop
    
    Else
        p = 2 * dx - dy
        
        Do While y <> Y2
        
            If p >= 0 Then
                x = x + stepX
                p = p - 2 * dy
            End If
            
            y = y + stepY
            p = p + 2 * dx
            
           If (Map(Int(x / ObjectSize), Int(y / ObjectSize)) = 1) Then
                ForeColor vbBlack
                DrawLine X1, Y1, X2, Y2
                Exit Sub
           End If
        Loop
    End If
    DrawLine X1, Y1, X2, Y2
End Sub

Public Sub DrawLineWithAngleAndLength(X1 As Long, Y1 As Long, angle_deg As Double, Length As Long, ByRef Map() As Long, ObjectSize As Long)
    ' Converter o ângulo para radianos
    Dim angle_rad As Double
    angle_rad = angle_deg '* 3.14159 / 180... sim já uso Radianos
    
    ' Calcular as coordenadas finais da linha
    Dim X2 As Long
    Dim Y2 As Long
    X2 = X1 + Length * Cos(angle_rad)
    Y2 = Y1 + Length * Sin(angle_rad)
    
    ' Chame a função BresenhamLine com as coordenadas finais
    BresenhamLine X1, Y1, X2, Y2, Map, ObjectSize
End Sub

estou a obter resultados inesperados no if:
 

If (Map(Int(x / ObjectSize), Int(y / ObjectSize)) = 1) Then
                ForeColor vbBlack
                DrawLine X1, Y1, X2, Y2
                Exit Sub
           End If

até posso obter '-1'... mas não faz sentido... porque o Zero do array Map() é 1... por isso não me deveria dar esse erro 😞

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...