Kahden linjan leikkauspiste (3 funktiota + esim.)

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Kahden linjan leikkauspiste (3 funktiota + esim.)

Post by MaGetzUb »

Juu eli olen miettinyt miten saan laskettua kahden linjan leikkauspisteen. Joo-o onhan se sdk:n LinesIntersect ihan hyvä. Mutta päätinpä tehdä kaksi eri funktiota ihan vain huvikseni ja tarvitsevien hyödyksi. :)
Tässäpä vielä lähde näille kaavoille: http://en.wikipedia.org/wiki/Line-line_intersection
EDIT:

Unohdin pistää infoa:
Nämä samat muuttujat pätee myös LsIPy-funktiossa.
LsIPx(viiva1x,viiva1y,viiva1:n pää x, viiva1:n pää y, viiva2x,viiva2y,viiva2:n pää x, viiva2:n pää y)

Code: Select all


Repeat 
    
    Color cbwhite
    Line 0,0,Mousex(),Mousey()
    Line 0,150,400,150
    Text 0,0,"Intersection points: X:"+LsIPx(0,0,MouseX(),MouseY(),0,150,400,150)+", Y:"+LsIPy(0,0,MouseX(),MouseY(),0,150,400,150)
    Color cbred
    
    Cross(LsIPx(0,0,MouseX(),MouseY(),0,150,400,150),LsIPY(0,0,MouseX(),MouseY(),0,150,400,150))
    
    DrawScreen
Forever 

Function Cross(x,y)
    Line x-10,y-10,x+10,y+10
    Line x+10,y-10,x-10,y+10
EndFunction 

Function LsIPx(x1,y1,x2,y2,x3,y3,x4,y4)
    lasku1# = (x1*y2-y1-x2)*(x3-x4)-(x1-x2)*(x3*y4-y3*x4)
    lasku2# = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)
    Return lasku1/lasku2
EndFunction 

Function LsIPy(x1,y1,x2,y2,x3,y3,x4,y4)
    lasku1# = (x1*y2-y1-x2)*(y3-y4)-(y1-y2)*(x3*y4-y3*x4)
    lasku2# = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)
    Return lasku1/lasku2
EndFunction 
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: Kahden linjan leikkauspiste (3 funktiota + esim.)

Post by Ilmuri »

Code: Select all

Global LsIP_x#
Global LsIP_y#

Repeat
   
    Color cbwhite
    Line 0,0,Mousex(),Mousey()
    Line 0,150,400,150
    'Text 0,0,"Intersection points: X:"+LsIPx(0,0,MouseX(),MouseY(),0,150,400,150)+", Y:"+LsIPy(0,0,MouseX(),MouseY(),0,150,400,150)
	LsIP(0,0,MouseX(),MouseY(),0,150,400,150)
	Text 0,0,"Intersection points: X:"+LsIP_x+", Y:"+LsIP_y
    Color cbred
   
    Cross(LsIPx(0,0,MouseX(),MouseY(),0,150,400,150),LsIPY(0,0,MouseX(),MouseY(),0,150,400,150))
   
    DrawScreen
Forever

Function Cross(x,y)
    Line x-10,y-10,x+10,y+10
    Line x+10,y-10,x-10,y+10
EndFunction

Function LsIP(x1#,y1#,x2#,y2#,x3#,y3#,x4#,y4#)
	temp1# = (x1*y2-y1-x2)*(x3-x4)
	temp2# = (x3*y4-y3*x4)
	lasku1# = temp1-(x1-x2)*temp2
    lasku2# = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4)
	LsIP_x = lasku1/lasku2
	lasku1# = temp1-(y1-y2)*temp2
    LsIP_y = lasku1/lasku2
End Function
Eikö tuo ole ihan sama tehdä näin? Tuo ei myöskään tarkista onko törmäyspiste viivojen ulkopuolella.
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Kahden linjan leikkauspiste (3 funktiota + esi

Post by MaGetzUb »

Ilmuri wrote:Eikö tuo ole ihan sama tehdä näin? Tuo ei myöskään tarkista onko törmäyspiste viivojen ulkopuolella.
Joo ajattelin ensin tehdä myös että Global:la saisi arvot, mutta päätin kumminkin tehdä tuolla systeemillä, että kummallekkin oma, sen takia että jo on monta paikkaa tarkistettavana yht' aikaa.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Post Reply