Страница: 1 |
Страница: 1 |
Вопрос: Угол в градусах
Добавлено: 22.12.09 19:42
Автор вопроса: Саня | ICQ: 553816426
Необходимо вычислять угол наклона линии относительно нижней границы формы.
Есть проект VB6 на форме линия и текстовое окно.
Вот код:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line1.X2 = X
Line1.Y2 = Y
Text1.Text = Gradusov(Line1.X1, Line1.Y1, Line1.X2, Line1.Y2)
End Sub
Function Gradusov(CenterX As Single, CenterY As Single, X As Single, Y As Single) As Long
'Как высчитать угол наклона
End Function
Может есть какая нибудь формула?
Буду очень благодарен.
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Дмитрий Юпатов
Вопросов: 4
Ответов: 457
Web-сайт:
Профиль | | #1
Добавлено: 22.12.09 20:01
Алгоритм простой:
1) вычисляем разность Х
2) то же для У
3) вычисляем значение У/Х Это будет значение тангенса угла наклона линии к горизонтальной оси.
4) определяем (atan функция в vb6, кажется) арктангенс угла. Будем иметь его значение в радианах. Пересчитываем радианы в градусы (погугли как).
Код не привел, т.к. 6й версии не имею, а код в дотнете отличается - скипипастить не выйдет...
Номер ответа: 2
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #2
Добавлено: 22.12.09 20:02
Короче так. Уравнение прямой знаем? Знаем.
y = kx + b
Вот. Дальше такая фишка: tg(angle) = k
То есть тангенс угла наколна равен k. Значит, наша формула выглядит так:
y = tg(angle) * x + b
Арктангенс в VB6 есть: Atn, возвращающий угол в радианах. В итоге, чтобы посчитать угол, нужно всего лишь посчитать k. Angle = Atn(k)
k = (y2 - y1) / (x2 - x1)
Angle = Atn(k)
Следовательно, угол наклона в радианах:
Angle = Atn((y2 - y1) / (x2 - x1))
Если же x2 = x1, то просто возвращаем 1.5707963267949 если y2 > y1, -1.5707963267949 если y2 < y1. В итоге получаем формулу:
Номер ответа: 3
Автор ответа:
Илья
Вопросов: 1
Ответов: 48
Профиль | | #3
Добавлено: 22.12.09 20:07
из тригонометрии можно сделать формулу:
Номер ответа: 4
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #4
Добавлено: 22.12.09 20:18
Огромное спасибо VВDUnit, работает отлично я дописал чтобы функция сразу в градусах возвращала.
Номер ответа: 5
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #5
Добавлено: 22.12.09 20:29
Илья, а в каких единицах значения твоего кода? Это не градусы.
Номер ответа: 6
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #6
Добавлено: 22.12.09 20:30
Тогда
Замени на
Номер ответа: 7
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #7
Добавлено: 22.12.09 20:40
Ну да, что бы в когда линия вертикально было 90 градусов. Спасибо за помощь.
Номер ответа: 8
Автор ответа:
Саня
ICQ: 553816426
Вопросов: 10
Ответов: 99
Профиль | | #8
Добавлено: 22.12.09 20:58
Да-а-а... Это наверное единственный сайт где можно реально получить помощь. БЛАГОДАРОЧКА всем кто не прошел мимо!
Номер ответа: 9
Автор ответа:
Дмитрий Юпатов
Вопросов: 4
Ответов: 457
Web-сайт:
Профиль | | #9
Добавлено: 22.12.09 23:35
VВDUnit, те же яйца, только в профиль
Номер ответа: 10
Автор ответа:
Илья
Вопросов: 1
Ответов: 48
Профиль | | #10
Добавлено: 23.12.09 14:38
Градусы, просто там по четвертям, с каждой четвертью сбрасывается, это код только для III четверти ПКП