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
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
Zdravím,
programátorsky (bod A musí být na úsečce B-C):
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
Offline
↑ TomasJ:
Odpovím pro rovinu.
1) Vytvoříš parametrickou rovnici přímky BC. Z bodů BC vektor směrový a pak rovnici, kde
a směrový vektor
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 tak bod A leží mezi body BC
Pro prostor by přibyla třetí souřadnice.
Offline
↑ 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
Offline
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]
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