Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Altair86

Новый участник


Сообщения: 15
Благодарности: 2

Профиль | Отправить PM | Цитировать


Еще возможен альтернативный способ:
Dim N As Integer 'число углов/сторон
Dim XM() As Single 'координаты Х вершин
Dim YM() As Single 'координаты Y вершин
Dim fi() As Single ' угол такой) объяснение ниже
Dim sinus As Single 'синус этого угла
Dim cosinus As Single ' косинус его же
Dim len As Single 'длины сторон многоугольника
Dim angle() As Single ' то, что нам надо-- углы многоугольника
Dim i As Byte 'переменная цикла, юзаем везде где надо
Private Sub <название>
'<...> здесь у нас ввод N
'после чего задаем длины массивов
ReDim XM(0 to N+1)
ReDim YM(0 to N+1)
ReDim fi(0 to N)
ReDim Angle(1 to N)
'<...> здесь у нас ввод кооординат вершин от 1-й до N-й
' внимание! вершины нумеруем по часовой стрелке
XM(0)=XM(N)
XM(N+1)=XM(1)
YM(0)=YM(N)
YM(N+1)=YM(1)
'0-я и (N+1)-я вершины будут нужны

'Далее вычисляется угол между i-й стороной и положительным
'направлением оси Ох. Угол отсчитывается против часовой стрелки
' это то самое fi
For i= 0 To N
'вычисляем длину i-й стороны
'i-я сторона идет от i-й вершины к (i+1)-й
'вот нам и понадобились 0-я и N+1-я вершины
len=Sqr (((XM(i)-XM(i+1))^2+(YM(i)-YM(i+1))^2)
'находим синус и косинус вычисляемого угла
sinus= (YM(i+1)-YM(i))/len
cosinus= (XM(i+1)-XM(i))/len
' Дальше считаем сам угол
If sinus>=0 Then
fi(i) =acos(cosinus)
Else
fi(i)=2*Pi-acos(cosinus)
EndIf
Next i

For i =1 to N
angle(i)= Pi+ (fi(i)-fi(i-1))
'здесь понадобилась 0-я сторона
If angle(i)<0 Then angle(i)= angle(i)+2*Pi
angle(i)=angle(i)*180/Pi
Next i
'<...> здесь можем вывести значения углов
'массив углов можно не создавать,тогда
'вывод внутри последнего цикла делаем
End Sub

-------
Будь проклят тот день, когда обезьяна слезла с дерева и научилась говорить...


Отправлено: 14:51, 01-06-2008 | #9