Kolla först på bilden: Det här hann jag knåpa ihop. Det är inte färdigt, men det visar principen. Problemet är bara att det bara fungerar om punkterna ligger i en viss ordning medsols.kordinater...
http://www.hjampis.kiruna.se/~bo85dmjt/kordinater.gif
Jag vet kordinaterna för a, b och c.
sträckorna d-c och c-e är båda 50 pixels.
sträckan d-e är vinkelrät mot c-f.
c-f delar vinkeln acb i mitten.
jag behöver beräkna kordinaterna för e och d.Sv: kordinater...
Längden på e-c och e-d är för närvarande samma som avståndet mellan a och c eller b och c (kommer inte ihåg vilken). Den biten är lätt att ändra, det svåra är punktordningen.
<code>
Option Explicit
Private Type Point
x As Double
y As Double
End Type
'Formen heter frmTest och har inställningarna:
'ScaleWidth=100
'ScaleHeight=-100
'ScaleTop=100
'ScaleLeft=0
Private Sub Form_Load()
Dim a As Point, b As Point, c As Point
a.x = 40: a.y = 50
b.x = 20: b.y = 80
c.x = 30: c.y = 50
DrawPoint a
DrawPoint b
DrawPoint c
LineBetween a, c
LineBetween b, c
Dim v1 As Point, v2 As Point
v1.x = a.x - c.x: v1.y = a.y - c.y
v2.x = b.x - c.x: v2.y = b.y - c.y
Dim cosa As Double, sina As Double
cosa = Sqr((1 + (v1.x * v2.x + v1.y * v2.y) / Sqr((v1.x * v1.x + v1.y * v1.y) * (v2.x * v2.x + v2.y * v2.y))) / 2)
sina = Sqr(1 - cosa * cosa)
Dim f As Point
f.x = v1.x * cosa - v1.y * sina + c.x
f.y = v1.y * cosa + v1.x * sina + c.y
Dim d As Point, e As Point
d.x = -v1.x * sina - v1.y * cosa + c.x
d.y = -v1.y * sina + v1.x * cosa + c.y
e.x = v1.x * sina + v1.y * cosa + c.x
e.y = v1.y * sina - v1.x * cosa + c.y
DrawPoint d
DrawPoint e
DrawPoint f
LineBetween d, e
End Sub
Private Sub DrawPoint(p As Point)
With p
frmTest.PSet (.x, .y)
frmTest.PSet (.x + 1, .y)
frmTest.PSet (.x - 1, .y)
frmTest.PSet (p.x, p.y + 1)
frmTest.PSet (p.x, p.y - 1)
End With
End Sub
Private Sub LineBetween(p1 As Point, p2 As Point)
frmTest.Line (p1.x, p1.y)-(p2.x, p2.y)
End Sub
</code>
/Niklas Jansson