Спирографическая программа VB.NET

Я пытаюсь создать программу, которая будет рисовать гипотрохоиды (спирограф). Программа ниже компилируется нормально. Но когда я запускаю его, я получаю только часть рисунка.. Я не уверен, что делаю неправильно. Я довольно новичок в VB. Любая помощь приветствуется. Благодарю.

Вот скриншот http://imgur.com/a/KxFWk

Public Class Form1

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
End Sub

Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint

Dim x As Integer
Dim y As Integer
Dim p As Integer
Dim x1 As Integer
Dim y1 As Integer
Dim x2 As Integer
Dim y2 As Integer

x = 75
y = 15
p = 15

x1 = (x + y) * Math.Cos(0) + p * Math.Cos(0)
y1 = (x + y) * Math.Sin(0) + p * Math.Sin(0)
For t = 0 To 500 Step 0.1
    x2 = (x + y) * Math.Cos(t) + p * Math.Cos((x + y) * t / y)
    y2 = (x + y) * Math.Sin(t) + p * Math.Sin((x + y) * t / y)
    e.Graphics.DrawLine(Pens.Blue, x1, y1, x2, y2)
    x1 = x2
    y1 = y2
Next
End Sub
End Class

1 ответ

Результаты вычислений Sin и Cos приводят к отрицательным числам, где параметр больше 90 для cos и больше 180 для sin.

Чтобы увидеть все изображение, вам нужно изменить смещение для x2 и y2 - см. Код ниже. Измените число 200 в каждой из четырех строк на значение, соответствующее вашей картинке

    x1 = 200 + CInt((x + y) * Math.Cos(0) + p * Math.Cos(0))
    y1 = 200 + CInt((x + y) * Math.Sin(0) + p * Math.Sin(0))

    For t As Double = 0 To 500 Step 0.1
        x2 = 200 + CInt((x + y) * Math.Cos(t) + p * Math.Cos((x + y) * t / y))
        y2 = 200 + CInt((x + y) * Math.Sin(t) + p * Math.Sin((x + y) * t / y))
        e.Graphics.DrawLine(Pens.Blue, x1, y1, x2, y2)
        x1 = x2
        y1 = y2
    Next
Другие вопросы по тегам