Представим Улитку Паскаля как конхоиду. Не углубляясь в теорию кривых, дадим такое нестрогое определение: конхоида - это геометрическое место точек, полученное перемещением каждой точки первоначальной кривой вдоль определенным образом заданных поверхностей. Для Улитки Паскаля первоначальной кривой служит самая обычная окружность, а переносятся точки вдоль линий, проходящих через точку, лежащую на этой окружности. Поясним графически. На рисунке мы выбираем на окружности неподвижную точку Р и переменную точку М, которую мы сдвигаем вдоль линии, соединяющей точки Р и М на какое-то фиксированное расстояние а.
Полученные семейства точек и есть конхоида окружности относительно фиксированной точки. Программа позволяет получить ожидаемые картинки. Сначала назначим а=0.25R. (Постепенно увеличивайте эту величину). Обратите внимание на необходимость сделать два оборота (центральный угол, он же переменная f от 0 до 720 градусов) - один сдвигает точки наружу, а второй оборот - внутрь окружности. Основная тонкость переход от центрального угла окружности, по которому мы проходим в цикле (переменные f в градусах или t в радианах), к углу линии, соединяющей постоянную точку с текущей на окружности c горизонтальной осью (переменная alfa)
Form1.ScaleMode = vbPixels Cls pi = 4 * Atn(1) scal = 15 'радиус окружности R = 90 ' точка на окружности ' в качестве разделителя используйте запятую для русской версии! a = CSng(Text1.Text) * R ' a = 1.5 * r' делаем оборот For f = 1 To 720 Step 5 t = f * pi / 180 x = R * (1 + Cos(t)) y = R * Sin(t) alfa = 0 If x > 0 Then alfa = Atn(y / x) If f < 360 Then X1 = x - a * Cos(alfa) Y1 = y - a * Sin(alfa) Else X1 = x + a * Cos(alfa) Y1 = y + a * Sin(alfa) End If DrawWidth = 2 Circle (X1 + 190, Y1 + 250), 2, vbBlue Circle (x + 190, y + 250), 2, vbRed Line (x + 190, y + 250)-(X1 + 190, Y1 + 250), vbGreen Next f