Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 22. 11. 2014 11:53 — Editoval TomasJ (22. 11. 2014 11:54)

TomasJ
Zelenáč
Příspěvky: 11
Reputace:   
 

Bod ležící na úsečce

Zdravím, potřebuji poradit, na některé části matematiky jsem totiž absolutní hlupák.

Mám 3 body:
A, B a C
Body B a C tvoří úsečku (jednu stranu nějakého geometrického tvaru) a já potřebuji zjistit, jestli bod A leží na této úsečce.

Absolutně netuším jak na to. Většinou si vystačím se základními počty.
Prosím někoho chytřejšího, zda by mi to vysvětlil? Potřebuji ale, aby to bylo napsáno co nejjasněji (co jak počítat), protože nejen že tomu nerozumím, když je to napsané v matematickém vzorci s nějakými zástupnými znaky (pro mě hieroglyfy), ale navíc to potřebuji zapsat programátorsky. Děkuji předem za ochotu a rady.

Offline

 

#2 22. 11. 2014 13:39 — Editoval mák (22. 11. 2014 13:50)

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 917
Reputace:   63 
 

Re: Bod ležící na úsečce

Zdravím,
programátorsky (bod A musí být na úsečce B-C):

Code:

Function Test(Bx,By,Ax,Ay,Cx,Cy) As Boolean
    Test = False
    If Bx=Cx Then 
        Test = ((By<=Ay And Ay<=Cy) Or (By>=Ay And Ay>=Cy)) And (Ax=Bx)
    ElseIf By=Cy Then
        Test = ((Bx<=Ax And Ax<=Cx) Or (Bx>=Ax And Ax>=Cx)) And (Ay=By)
    ElseIf (Ax-Bx)*(Cy-By)=(Ay-By)*(Cx-Bx)  Then 
        Test = (Bx<=Ax And Ax<=Cx) Or (Bx>=Ax And Ax>=Cx)
    EndIf  
End Function

LibreOffice Verze: 7.6.6.3, Maxima 5.47.0 (SBCL)

Offline

 

#3 22. 11. 2014 14:08 — Editoval marnes (22. 11. 2014 14:10)

marnes
Příspěvky: 11227
 

Re: Bod ležící na úsečce

↑ TomasJ:

Odpovím pro rovinu.
1) Vytvoříš parametrickou rovnici přímky BC. Z bodů BC vektor směrový a pak rovnici

$x=B_{x}+s_{x}t\\y=B_{y}+s_{y}t$, kde $B=[B_{x};B_{y}]$ a směrový vektor $s=[s_{x};s_{y}]$ a t je parametr

2) nyní dosadíš za x a y souřadnice bodu A a pro každou rovnici vyjádříš písmeno t
3) Pokud t bude v obou případech stejné a v intervalu $(0;1)$ tak bod A leží mezi body BC

Pro prostor by přibyla třetí souřadnice.


Jo. A na začátku vás zdravím.

Offline

 

#4 22. 11. 2014 18:57

TomasJ
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Bod ležící na úsečce

mák:
Děkuji, přepíšu si to do javascriptu a vyzkouším.

marnes:
Jak říkám, na matiku jsem poleno, nejde mi do hlavy kde se vezme, a co znamená to t.

Offline

 

#5 22. 11. 2014 21:02

marnes
Příspěvky: 11227
 

Re: Bod ležící na úsečce

↑ TomasJ:

t je, jak jsem psal parametr. Je to číslo z oboru čísel reálných. Jeho význam je ten, že k počátečnímu bodu vektoru "přidávám" násobek směrového vektoru.
Když za t dosadím nulu, tak se dostanu do počátečního bodu (prvního krajního bodu úsečky)
Když za t dosadím jedničku, dostanu se do koncového bodu (druhého krajního bodu úsečky)
Když za t dosadím jednu polovinu, dostanu se do středu úsečky.
Když dosadím jednu čtvrtinu, dostanu se do čtvrtiny úsečky.
Když dosadím dvojku, dostanu se do vzdálenosti, které je rovna dvojnásobku délky úsečky ve směru poč. bod, koncový bod.
ATD
Na a když bych tedy dosazoval za t všechna reálná čísla, vyplnil bych přímku.
Když dosadím za t čísla z intervalu (0;1), získám všechny části úsečky


Jo. A na začátku vás zdravím.

Offline

 

#6 23. 11. 2014 17:49 — Editoval TomasJ (23. 11. 2014 17:53)

TomasJ
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Bod ležící na úsečce

mák napsal(a):

Zdravím,
programátorsky (bod A musí být na úsečce B-C):

Code:

Function Test(Bx,By,Ax,Ay,Cx,Cy) As Boolean
    Test = False
    If Bx=Cx Then 
        Test = ((By<=Ay And Ay<=Cy) Or (By>=Ay And Ay>=Cy)) And (Ax=Bx)
    ElseIf By=Cy Then
        Test = ((Bx<=Ax And Ax<=Cx) Or (Bx>=Ax And Ax>=Cx)) And (Ay=By)
    ElseIf (Ax-Bx)*(Cy-By)=(Ay-By)*(Cx-Bx)  Then 
        Test = (Bx<=Ax And Ax<=Cx) Or (Bx>=Ax And Ax>=Cx)
    EndIf  
End Function

Tak kód jsem přepsal, ale nakonec jsem zjistil, že je moc cyklů (v tom co s tím chci dělat), takže jsem hledal jiné řešení.

Jen se zeptám: Dokázal bys mi objasnit, co přesně dělají tyhle podmínky (upraveno do podoby VB)?

Bod A=[px;py]
Bod B=[x1;y1]
Bod C=[x2;y2]

Code:

If y1 < py And y2 >= py Or y2 < py And y1 >= py Then
    If x1 + (py - y1) / (y2 - y1) * (x2 - x1) < px Then

    End If
End If

Tento kousek kódu jsem totiž našel na netu, je funkční a je součástí kódu pro zjištění, zda se bod A nachází v polygonu. Jen nechápu co dělají ty podmínky, co to je za akce.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson