Изменять координаты (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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д