Страница: 1 |
Страница: 1 |
Вопрос: Sin Cos
Добавлено: 03.09.07 17:29
Автор вопроса: Sneaks
Есть такая вешь поворачиваю обьект углом (Alf) и получаю координаты и их ставлю. Если надо дальше повернуть обьет изменяю угол и опять ставлю по координатам:
alf=0.52
x=Sin(alf)
y=Cos(alf)
С эитм все ок. Только появилась задача обратная. В нужную сторону повернуть обьект а потом по координатам узнать угол. Вот с этим ни как не могу понять что делать
Грубо говоря:
x=1
y=0
alf=?
Уже все школу вспомнил и препода по геометрии :))
Должен быть арксинус и арккосинус но его нет. Помогите :)
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #1
Добавлено: 03.09.07 19:12
Public Function ACos#(x#)
ACos = Atn(-x / Sqr(-x * x + 1)) + 2 * Atn(1)
End Function
Public Function ASin#(x#)
ASin = Atn(x / Sqr(-x * x + 1))
End Function
Номер ответа: 2
Автор ответа:
udpn
Вопросов: 2
Ответов: 45
Профиль | | #2
Добавлено: 03.09.07 19:30
это х*рня. все делается через арктангенс. http://slil.ru/24810693
Номер ответа: 3
Автор ответа:
Sneaks
Вопросов: 9
Ответов: 84
Профиль | | #3
Добавлено: 03.09.07 19:37
спасибо сейчас попробую
Номер ответа: 4
Автор ответа:
udpn
Вопросов: 2
Ответов: 45
Профиль | | #4
Добавлено: 03.09.07 20:16
нзч
Номер ответа: 5
Автор ответа:
Sneaks
Вопросов: 9
Ответов: 84
Профиль | | #5
Добавлено: 03.09.07 22:23
Пример el-paso отлично работает то чно нужно )
udpn а твой фаил чет не качается.
Номер ответа: 6
Автор ответа:
udpn
Вопросов: 2
Ответов: 45
Профиль | | #6
Добавлено: 04.09.07 19:41
угу, только скорость отличается )
Option Explicit
Private X0 As Long, Y0 As Long
Private Const Pi As Single = 3.14159
'Private Declare Function PlgBlt Lib "gdi32" (ByVal hdcDest As Long, lpPoint As POINTAPI, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long) As Long
'Private Type POINTAPI
' x As Long
' y As Long
'End Type
Private Sub Form_Load()
Show
X0 = ScaleWidth \ 2
Y0 = ScaleHeight \ 2
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
X0 = x
Y0 = y
Form_MouseMove 0, 0, x, y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
 im r As Long
 im Phi As Single
r = Sqr((x - X0) ^ 2 + (y - Y0) ^ 2)
If y - Y0 = 0 Then
If x - X0 = 0 Then
Phi = -1
GoTo draw
Else
Phi = Pi / 2
End If
Else
Phi = Abs(Atn((x - X0) / (y - Y0)))
End If
If x - X0 < 0 Then
If y - Y0 < 0 Then
Phi = (Pi / 2 - Phi) + 3 * Pi / 2
Else
Phi = Phi + Pi
End If
Else
If y - Y0 < 0 Then
Phi = Phi
Else
Phi = Pi - Phi
End If
End If
'A
'Phi = Phi - Pi / 2
'If Phi < 0 Then Phi = Phi + 2 * Pi
'B
If Phi > Pi Then Phi = Phi - Pi * 2
Phi = Phi / Pi * 180
draw:
Cls
Caption = "r = " & Format(r, "0.000" & "; Phi = " & Format(Phi, "0.000"
PSet (X0, Y0)
FillStyle = 1
Circle (X0, Y0), r
Line (X0, Y0)-(X0 + (x - X0) * ScaleWidth, Y0 + (y - Y0) * ScaleWidth)
FillStyle = 0
Circle (x, y), 5
End Sub
Номер ответа: 7
Автор ответа:
el-paso
Вопросов: 0
Ответов: 56
Профиль | | #7
Добавлено: 05.09.07 00:36
А чё я?..
Я ничё..
Я только функции арксинуса и арккосинуса дал..