Страница: 1 |
Вопрос: Угол в градусах | Добавлено: 22.12.09 19:42 |
Автор вопроса: ![]() |
Необходимо вычислять угол наклона линии относительно нижней границы формы.
Есть проект 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 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 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 четверти ПКП |
Страница: 1 |
|