Изменять координаты (x или y) на числа меньше единицы - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Например, если мы введём команду
То PictureBox сдвинется с места наверх, но вправо не пойдёт(даже если зациклить) Вот у меня такая же проблема с тригонометрическими функциями:
Эта процедура рисует линию (наклонённую по розе ветров например на 45 градусов(0 верх, 90 право) от точки до бортика. Но проблема в том что нам приходится умножать синус и косинус на 10, а если мы умножаем синус или косинус на 10, то во-первых за один проход по циклу координаты x и y изменяются со слишком большим интервалом, что и может привести к тому, что точка может проскочить бортик(во вложении видео) во-вторых, т.к. число double переводится в integer... вообщем я точно не могу объяснить дельным языком, я ещё не проходил тригонометрические функции, но я думаю если посмотреть на гифку, то будет понятно, что если бы в смещении по координатам учитывались хотя-бы 2-3 знака после запятой, то не было бы такого резкого перехода. Может кто знает как решить данную проблему. Дам плюсиков сколько смогу))

Решение задачи: «Изменять координаты (x или y) на числа меньше единицы»

textual
Листинг программы
Option Strict On
 
Public Class Form1
    Private pbGreen As PictureBox
 
    Private pbRed As PictureBox
    Private pbRedLoc As PointF
 
    Private Timer1 As Timer
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Size = New Size(300, 300)
 
        pbGreen = New PictureBox With {.Location = New Point(10, 0), _
                                    .Size = New Size(10, 10), _
                                    .BackColor = Color.Green}
        Me.Controls.Add(pbGreen)
 
        pbRed = New PictureBox With {.Location = New Point(0, 10), _
                                    .Size = New Size(10, 10), _
                                    .BackColor = Color.Red}
        Me.Controls.Add(pbRed)
 
        Timer1 = New Timer With {.Interval = 50, .Enabled = True}
        AddHandler Timer1.Tick, AddressOf Timer1_Tick
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        pbGreen.Location = New Point(CInt(pbGreen.Location.X + 0.5), pbGreen.Location.Y + 1)
 
        pbRedLoc = PointF.Add(pbRedLoc, New SizeF(0.5, 1))
        pbRed.Location = Point.Ceiling(pbRedLoc)
 
        If pbGreen.Location.Y > Me.ClientRectangle.Height - 20 Then Timer1.Stop()
    End Sub
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы