Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Линии-стрелки Добавлено: 20.06.07 00:11  

Автор вопроса:  Winand | Web-сайт: winandfx.narod.ru
История такая:
У меня есть редактор карт для [СПАМ]мобикрафта[/СПАМ]
И мне нужно показать переходы между локациями.

Вопрос такой:
Как сделать рисование стрелок?
Линию-то можно легко провести, а вот как под нужным углом к ней еще две... Или есть способ проще?

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Docal



ICQ: 408802757 

Вопросов: 14
Ответов: 126
 Web-сайт: Doc-source.pp.net.ua
 Профиль | | #1
Добавлено: 20.06.07 00:15
Po formule cotoruyu mozhna lehgo sostryapat

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 20.06.07 01:47
Нда-ааа... А это сложнее чем казалось ))
Option Explicit
Const Pi As Double = 3.14159265358979
Const X As Long = 150
Const Y As Long = 150
Const z1 As Long = 120
Const z2 As Long = 120
Private Sub Form_Load()
Dim Ang As Double
Line (z1, z2)-(X, Y)
Ang = Angle(z1, z2, X, Y)
Line (X, Y)-(-xX(20, Pi / 4 + Ang) + X, -yY(20, Pi / 4 + Ang) + Y)
Line (X, Y)-(-xX(20, Pi / 4 - Ang) + X, yY(20, Pi / 4 - Ang) + Y)
End Sub
Public Function Angle(ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Double
Angle = Atn((y2 - y1) / (x2 - x1))
End Function
Public Function yY(ByVal LLen As Long, ByVal Ang As Double) As Double
yY = LLen * Sin(Ang)
End Function
Public Function xX(ByVal LLen As Long, ByVal Ang As Double) As Double
xX = LLen * Cos(Ang)
End Function

Не знаю как я это написал )) НО работает только на промежутке (Pi/2;-Pi/2). Мысль дальше не хочет идти...

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 20.06.07 01:57
Вот так даже:
Line (X, Y)-(Sgn(z1 - X) * xX(20, Pi / 4 + Ang) + X, Sgn(z1 - X) * yY(20, Pi / 4 + Ang) + Y)
Line (X, Y)-(Sgn(z1 - X) * xX(20, Pi / 4 - Ang) + X, -Sgn(z1 - X) * yY(20, Pi / 4 - Ang) + Y)

Но всё-равно не работает если стрелка расположена по вертикали... лан надо спать идти

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 21.06.07 14:40
Const Pi As Double = 3.14159265358979

Private Sub Arrow(ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long, Optional ArrowLen As Long = 10, Optional ArrowAng As Double = Pi / 4)
Dim Ang As Double

Line (x1, y1)-(x2, y2)
If x2 - x1 = 0 Then Ang = Pi / 2 Else Ang = Atn((y2 - y1) / (x2 - x1))
If x2 - x1 <> 0 Then
    Line (x2, y2)-(Sgn(x1 - x2) * ArrowLen * Cos(ArrowAng + Ang) + x2, Sgn(x1 - x2) * ArrowLen * Sin(ArrowAng + Ang) + y2)
    Line (x2, y2)-(Sgn(x1 - x2) * ArrowLen * Cos(ArrowAng - Ang) + x2, -Sgn(x1 - x2) * ArrowLen * Sin(ArrowAng - Ang) + y2)
Else
    Line (x2, y2)-(ArrowLen * Cos(ArrowAng + Ang) + x2, Sgn(y1 - y2) * ArrowLen * Sin(ArrowAng + Ang) + y2)
    Line (x2, y2)-(ArrowLen * Cos(ArrowAng - Ang) + x2, -Sgn(y1 - y2) * ArrowLen * Sin(ArrowAng - Ang) + y2)
End If

End Sub


Вот как то так... как работает сам не знаю...
написал методом брутфорса ))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам