Связка линий.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Связка линий.

Сообщение ALX_2002 » 22.03.2003 (Сб) 12:25

Здарова челы. ! Ух как давно я тут не был. Очень рад всех вас видеть. :D . У меня тут вопр возник - как связать две линии в сочленение.
Т.е есть линия 1 и линия 2.
Line1.x1 и Line1.y1 - закреплены
Line1.x2 и Line1.y2 и Line2.x1 и Line2.y1 Общая точка этих линий.
А Line2.x2 и Line2.y2 свободно перемещаются.
Задача создать нечто похожее на руку человека. Т.е кисть я перемещаю, а вся рука сгибается или разгибается.

Помогите плиз... Очень нуно :)

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 22.03.2003 (Сб) 14:12

я думаю что если рука крутится, то нжно пользоваться синусами и косинусами, для нахождения координат... советую сначала посмотреть примеры аналоговых часов (например на planet-source-code.com), где идёт полный оборот стрелок... :twisted: и от этого плясать.... 8)
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Re: Связка линий.

Сообщение GoGosha » 22.03.2003 (Сб) 14:21

ALX_2002 писал(а):Здарова челы. ! Ух как давно я тут не был. Очень рад всех вас видеть. :D . У меня тут вопр возник - как связать две линии в сочленение.
Т.е есть линия 1 и линия 2.
Line1.x1 и Line1.y1 - закреплены
Line1.x2 и Line1.y2 и Line2.x1 и Line2.y1 Общая точка этих линий.
А Line2.x2 и Line2.y2 свободно перемещаются.
Задача создать нечто похожее на руку человека. Т.е кисть я перемещаю, а вся рука сгибается или разгибается.

Помогите плиз... Очень нуно :)


Что-то я не понял. Надо чтоб конец линии вращался вокруг вращающегося конца другой линии?

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 22.03.2003 (Сб) 18:23

2 Firestorm: Хм... Щапопробую поискать - А моно более точную ссылочку ?
:o 2 GoGosha: Неа... Не совсем так.
Значит смотри - дело такое:
Есть три точки A,B,C
Две соединены линиями AB и BC
Точка A - жёстко закреплена.
Точка B - соединена с A и C.
Точку C - я произвольно передвигаю (Скореевсего по курсору)
И задача - Надо, чтобы когда я передвигаю точку C относительно A, точка B срабатывала как сустав.
Точнее - A - плечо, B - Сустав, C - кисть. И двигаю кисть, а локоть сгибается или разгибается.
:wink:

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 22.03.2003 (Сб) 21:06

НУ во 1-ых, дарова, ALX_2002 !!!!!

У меня есть вариант. Только теоретический. Допустим длины линий = L1 (AB) и L2 (BC). При каждом изменении положения C считаются точки пересечений окружностей:
с центром в A и радиусом L1
и с центром в C и радиусом L2

Поскольку таких точек две - логично выбрать ту, которая ближе к предыдущей позиции точки B

Вот чисто теория, какже это будет на практике - ты дал мне о чем подумать сегдня вечером :D , а то уж я нек знаю, чем и заняться......
Изображение

Firestorm
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 946
Зарегистрирован: 02.05.2002 (Чт) 14:36
Откуда: Russia

Сообщение Firestorm » 23.03.2003 (Вс) 7:29

ALX_2002 писал(а):2 Firestorm: Хм... Щапопробую поискать - А моно более точную ссылочку ?

нет :lol:
написал же, что ищи на planet-source-code.com ... в поиске должен найти предостаточно примеров... :!:
...просто гламурный падонак...
_________________
reborn! v.2 :twisted:
_________________

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 23.03.2003 (Вс) 15:55

ALX_2002 писал(а):2 Firestorm: Хм... Щапопробую поискать - А моно более точную ссылочку ?
:o 2 GoGosha: Неа... Не совсем так.
Значит смотри - дело такое:
Есть три точки A,B,C
Две соединены линиями AB и BC
Точка A - жёстко закреплена.
Точка B - соединена с A и C.
Точку C - я произвольно передвигаю (Скореевсего по курсору)
И задача - Надо, чтобы когда я передвигаю точку C относительно A, точка B срабатывала как сустав.
Точнее - A - плечо, B - Сустав, C - кисть. И двигаю кисть, а локоть сгибается или разгибается.
:wink:



Ну, тогда просто.
Код: Выделить всё

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    '&&&&&&& &&&&&&
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    '&&&& &&&&&& &&&&&& &&&&&& &&&&, &&
    If Length <= (1320 * 2) Then
        '&&&& &&&&& &&&&&&&&&&& &&&&&&&& &&&& &&&&&&&&&&&
        '&&& &&&&& &&&&&& && &&&&&&&&&&&&&&&&& &
        '&&&&&&& &&&&&&&&&&&& &&& &&& &&&&&&&&&&&
        '& &&&&& &&&&&&&&& &&&&& &&& &&&&&
        '&&&&&&&& &&&&&&&&&&&
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        '&& &&&&&&& Ï&&&&&&&
        c = (b ^ 2 - a ^ 2) ^ 0.5
        '&&&&&&& &&&&
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        '&&&&&&& &&&&&& Õ & &&&&&& Ó & && &&& &&& &&&&&&& &&&&&
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 23.03.2003 (Вс) 15:58

GoGosha писал(а):
ALX_2002 писал(а):2 Firestorm: Хм... Щапопробую поискать - А моно более точную ссылочку ?
:o 2 GoGosha: Неа... Не совсем так.
Значит смотри - дело такое:
Есть три точки A,B,C
Две соединены линиями AB и BC
Точка A - жёстко закреплена.
Точка B - соединена с A и C.
Точку C - я произвольно передвигаю (Скореевсего по курсору)
И задача - Надо, чтобы когда я передвигаю точку C относительно A, точка B срабатывала как сустав.
Точнее - A - плечо, B - Сустав, C - кисть. И двигаю кисть, а локоть сгибается или разгибается.
:wink:



Ну, тогда просто.
Код: Выделить всё

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    '&&&&&&& &&&&&&
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    '&&&& &&&&&& &&&&&& &&&&&& &&&&, &&
    If Length <= (1320 * 2) Then
        '&&&& &&&&& &&&&&&&&&&& &&&&&&&& &&&& &&&&&&&&&&&
        '&&& &&&&& &&&&&& && &&&&&&&&&&&&&&&&& &
        '&&&&&&& &&&&&&&&&&&& &&& &&& &&&&&&&&&&&
        '& &&&&& &&&&&&&&& &&&&& &&& &&&&&
        '&&&&&&&& &&&&&&&&&&&
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        '&& &&&&&&& Ï&&&&&&&
        c = (b ^ 2 - a ^ 2) ^ 0.5
        '&&&&&&& &&&&
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        '&&&&&&& &&&&&& Õ & &&&&&& Ó & && &&& &&& &&&&&&& &&&&&
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub


Простите за русский

Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    'считаем длинну
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    'если длинна меньше длинны руки, то
    If Length <= (1320 * 2) Then
        'надо найти пересечение графиков двух окружностей
        'оно будет лежать на перпемпендикуляре к
        'отрезку соеденяющему эти две точточточки
        'и будет проходить через его центр
        'получаем треугольник
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        'по теореме Пифагора
        c = (b ^ 2 - a ^ 2) ^ 0.5
        'находим угол
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        'находим дельта Х и дельта У и по ним уже искомую точку
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 23.03.2003 (Вс) 16:00

GoGosha писал(а):
GoGosha писал(а):
ALX_2002 писал(а):2 Firestorm: Хм... Щапопробую поискать - А моно более точную ссылочку ?
:o 2 GoGosha: Неа... Не совсем так.
Значит смотри - дело такое:
Есть три точки A,B,C
Две соединены линиями AB и BC
Точка A - жёстко закреплена.
Точка B - соединена с A и C.
Точку C - я произвольно передвигаю (Скореевсего по курсору)
И задача - Надо, чтобы когда я передвигаю точку C относительно A, точка B срабатывала как сустав.
Точнее - A - плечо, B - Сустав, C - кисть. И двигаю кисть, а локоть сгибается или разгибается.
:wink:



Ну, тогда просто.
Код: Выделить всё

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    '&&&&&&& &&&&&&
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    '&&&& &&&&&& &&&&&& &&&&&& &&&&, &&
    If Length <= (1320 * 2) Then
        '&&&& &&&&& &&&&&&&&&&& &&&&&&&& &&&& &&&&&&&&&&&
        '&&& &&&&& &&&&&& && &&&&&&&&&&&&&&&&& &
        '&&&&&&& &&&&&&&&&&&& &&& &&& &&&&&&&&&&&
        '& &&&&& &&&&&&&&& &&&&& &&& &&&&&
        '&&&&&&&& &&&&&&&&&&&
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        '&& &&&&&&& Ï&&&&&&&
        c = (b ^ 2 - a ^ 2) ^ 0.5
        '&&&&&&& &&&&
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        '&&&&&&& &&&&&& Õ & &&&&&& Ó & && &&& &&& &&&&&&& &&&&&
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub


Простите за русский

Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    'считаем длинну
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    'если длинна меньше длинны руки, то
    If Length <= (1320 * 2) Then
        'надо найти пересечение графиков двух окружностей
        'оно будет лежать на перпемпендикуляре к
        'отрезку соеденяющему эти две точточточки
        'и будет проходить через его центр
        'получаем треугольник
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        'по теореме Пифагора
        c = (b ^ 2 - a ^ 2) ^ 0.5
        'находим угол
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        'находим дельта Х и дельта У и по ним уже искомую точку
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub


И ещё, вместо 3320 вставь длинну своих линий

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 23.03.2003 (Вс) 16:55

GoGosha писал(а):
GoGosha писал(а):
GoGosha писал(а):
ALX_2002 писал(а):2 Firestorm: Хм... Щапопробую поискать - А моно более точную ссылочку ?
:o 2 GoGosha: Неа... Не совсем так.
Значит смотри - дело такое:
Есть три точки A,B,C
Две соединены линиями AB и BC
Точка A - жёстко закреплена.
Точка B - соединена с A и C.
Точку C - я произвольно передвигаю (Скореевсего по курсору)
И задача - Надо, чтобы когда я передвигаю точку C относительно A, точка B срабатывала как сустав.
Точнее - A - плечо, B - Сустав, C - кисть. И двигаю кисть, а локоть сгибается или разгибается.
:wink:



Ну, тогда просто.
Код: Выделить всё

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    '&&&&&&& &&&&&&
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    '&&&& &&&&&& &&&&&& &&&&&& &&&&, &&
    If Length <= (1320 * 2) Then
        '&&&& &&&&& &&&&&&&&&&& &&&&&&&& &&&& &&&&&&&&&&&
        '&&& &&&&& &&&&&& && &&&&&&&&&&&&&&&&& &
        '&&&&&&& &&&&&&&&&&&& &&& &&& &&&&&&&&&&&
        '& &&&&& &&&&&&&&& &&&&& &&& &&&&&
        '&&&&&&&& &&&&&&&&&&&
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        '&& &&&&&&& Ï&&&&&&&
        c = (b ^ 2 - a ^ 2) ^ 0.5
        '&&&&&&& &&&&
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        '&&&&&&& &&&&&& Õ & &&&&&& Ó & && &&& &&& &&&&&&& &&&&&
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub


Простите за русский

Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    'считаем длинну
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    'если длинна меньше длинны руки, то
    If Length <= (1320 * 2) Then
        'надо найти пересечение графиков двух окружностей
        'оно будет лежать на перпемпендикуляре к
        'отрезку соеденяющему эти две точточточки
        'и будет проходить через его центр
        'получаем треугольник
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        'по теореме Пифагора
        c = (b ^ 2 - a ^ 2) ^ 0.5
        'находим угол
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        'находим дельта Х и дельта У и по ним уже искомую точку
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub


И ещё, вместо 3320 вставь длинну своих линий


А лучше вот-так
Код: Выделить всё

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    On Error Resume Next
    'считаем длинну
    Dim Length As Double
    Length = (Abs(Line1.X1 - X) ^ 2 + Abs(Line1.Y1 - Y) ^ 2) ^ 0.5
    'если длинна меньше длинны руки, то
    If Length <= (1320 * 2) Then
        'надо найти пересечение графиков двух окружностей
        'оно будет лежать на перпемпендикуляре к
        'отрезку соеденяющему эти две точточточки
        'и будет проходить через его центр
        'получаем треугольник
        Dim a As Double
        Dim b As Double
        Dim c As Double
       
        a = Length / 2
        b = 1320
        'по теореме Пифагора
        c = (b ^ 2 - a ^ 2) ^ 0.5
        'находим угол
        Dim Alpha As Double
        Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) + Atn(c / a)
        'находим дельта Х и дельта У и по ним уже искомую точку
        If Y < Line1.Y1 Then
            Alpha = (3.141592 * 2) - Alpha
        Else
            Alpha = Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) - Atn(c / a)
        End If
        Line2.X1 = (Cos(Alpha)) * b + ((Line1.X1))
        Line2.Y1 = (Sin(Alpha)) * b + ((Line1.Y1))
        Me.Cls
        Debug.Print Atn(Abs(Line1.Y1 - Y) / Abs(Line1.X1 - X)) * 57.29577951308
        Line1.Y2 = Line2.Y1
        Line1.X2 = Line2.X1
        Line2.X2 = X
        Line2.Y2 = Y
        'Circle (Line1.X1, Line1.Y1), 1320
        'Circle (X, Y), 1320
    End If
End Sub


sanches
El compa&#241;ero
El compa&#241;ero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 23.03.2003 (Вс) 17:42

молодца, код клевый!

вот только что мне не понравилось: так это то, что ты принял то, что обе линии одинаковой длины, хотя они врядли будут одинаковыми. Жалко с кодом помочь щас не могу - убегаю уже 8-(.

P.S. Ну все равно, клево :D Основа есть, теперь апдейтить легче будет..... :D
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, SemrushBot и гости: 55

    TopList