KDima писал(а):При повышении толщины промежутки закрываются
Рисуй сам
Ага, и генерация нового алгоритма для каждой новой линии в реалтаймеKDima писал(а):Каждой линии - свой алгоритм.
KDima писал(а):Каждой линии - свой алгоритм
Костя111 писал(а):...через функцию и строил бы по точкам
Const PI As Double = 3.14
Sub PaintEllipse(CenterX As Single, CenterY As Single, Width As Single, Height As Single, G As Single)
Dim R As Single, A As Single
Dim X As Single, Y As Single, oldX As Single, oldY As Single, iX As Single
Dim beta As Double 'Угол касательной к эллипсу
R = Width / 2 'Радиус эллипса
A = Height / Width 'Кэффициент сплюснутости эллипса по Y
'Рисуем эллипс
On Error Resume Next
oldX = -R: oldY = 0
For iX = -R + 1 To R + 1 Step 1
Y = A * Sqr(R ^ 2 - iX ^ 2) 'Находим текущую Y
'Рисуем линию из предыдущей точки до текущей
Line (CenterX + oldX, CenterY + oldY)-(CenterX + iX, CenterY + Y)
Line (CenterX + oldX, CenterY - oldY)-(CenterX + iX, CenterY - Y)
'Запоминаем текущ. координаты, чтобы продолжить линию в следущем витке
oldX = iX: oldY = Y
Next
'Рисуем границу
On Error Resume Next
oldX = -R - G: oldY = 0
For iX = -R + 1 To R + 1 Step 1
Y = A * Sqr(R ^ 2 - iX ^ 2) 'Находим Y эллипса
beta = Atn(-A * iX / Sqr(R ^ 2 - iX ^ 2)) 'Находим угол касательной (из выражения Tan(beta) = Y'(x) )
Y = Y + G * Sin(beta + PI / 2) 'Y точки на линии границы
X = iX + G * Cos(beta + PI / 2) 'X точки на линии границы
'Рисуем линию из предыдущей точки до текущей
Line (CenterX + oldX, CenterY + oldY)-(CenterX + X, CenterY + Y), RGB(255, 0, 0)
Line (CenterX + oldX, CenterY - oldY)-(CenterX + X, CenterY - Y), RGB(255, 0, 0)
'Запоминаем текущ. координаты, чтобы продолжить линию в следущем витке
oldX = X: oldY = Y
Next
On Error GoTo 0
End Sub
XairOn писал(а):... не совсем то, что было нужно, но тем не менее...
Arcanoid писал(а):А что нужно-то? Вроде ты про обрамление эллипса и спрашивал...
Сейчас этот форум просматривают: Google-бот и гости: 57