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 29. 04. 2009 16:50

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Pozice bodu v trojúhelníku vůči jeho vrcholům

Dobrý den,

potřeboval bych něco vyřešit:

Mám nějaký 2D trojúhelník, který má vrcholy A,B,C a každý z nich má souřadnici X,Y a uvnitř tohoto trojúhelníku mám bod P taktéž definovaný jako x,y.

Na každém z vrcholů je nějaká hodnota (třeba G,H a J).

Jakou hodnotu bude mít bod P?

Kdyby např. to nebyl trojúhelník, ale přímka AB a G=50 a H=70, a bod ležel přesně v 1/2, měl by hodnotu 60. Kdyby ležel v bodě A, měl by hodnotu G (tj. 50). Jde vlastně o poměr vzdálenosti, tj. P=p*(H-G)/d+G.

Jak se to ale počítá v trojúhelníku? Když bude v bodě A, dostane hodnotu G; když bude v 1/2 spojnice AB, měl by dostat (H-G)/2+G. Ale jak zjistit hodnotu, bude-li ležet někde uvnitř, a třeba ani na žádné spojnici vrcholů/stran/středů?

Potřebuji něco co nejméně výpočetně náročného. Tj. co nejméně dělení, a pokud možno žádné odmocniny (je-li to možné).

Předem děkuji.

Offline

 

#2 29. 04. 2009 18:21

Alesak
Místo: Stribro
Příspěvky: 357
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

to co hledas jsou nejspis barycentricky souradnice. delas vlastni grafickej engine?

Offline

 

#3 30. 04. 2009 07:30

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Alesak:
Děkuji, to by mohlo být ono.

Ještě to tak pochopit..

Jediné, co mi leze do hlavy je rovnice začínající f(r)= u interpolace.

U ostatního začínám trochu pochybovat, jestli to je středoškolská matematika.. nebo jsem prostě tupec..

Když vynecháme výpočet pomocí matic, tak vlastě barycentrické souřadnice 1 a 2 spočítám z té soustavy 2 rovnic, které jsou = 0 (dosazením jedné do druhé) a souřadnici 3 pak za předpokladu, že jejich součet je roven 1.

Chápu to dobře?

Jestli ano, tak to není tak strašné. Sice je tam jedno dělení, ale to se vsákne.. lepší než počítat inverzní matici.. :-)


Ad engine: je to tolik poznat? Tak nějak jsem nepochopil vektory a matice, nebo rovnice, tak jsem všechno vyřešil bez nich. A toto je poslední věc, která mi chybí pro přesnou detekci kolizí (a tušil jsem to už od začátku, ale všechno má nějaké řešení). Nepochopil jsem, jak to udělat ve 3D, tak rotuji polygony do výhledu bodu na jeho souřadncice [0,0,Z], který bude kolidovat, převedu na 2D, a tím vím 2D pozici v trojúhelníku. A když vím, jakým 3D bodů, odpovídají jednotlivé vrcholy, chtěl jsem to nějak interpolovat. Ale nevím, jestli to nakonec nebude složitější.

Offline

 

#4 30. 04. 2009 16:57 — Editoval Rumburak (30. 04. 2009 16:58)

Rumburak
Místo: Praha
Příspěvky: 8691
Reputace:   502 
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

Nechť  X = [x,y] .
Najdeš funkci  f  tvaru   f (X) = f(x,y) =  ax + by + c   ,  pro kterou je  f(A) = G,    f(B) = H,     f(C) = I,
z těchto 3 podmínek určíš  konstanty a, b, c    a pak vyjádříš f(P) dosazením souřadnic bodu P do předpisu
pro fci f.

Offline

 

#5 04. 05. 2009 07:21

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Rumburak:

Mě to asi tento rok nemyslí.. njn, 5 let po škole a jak to člověk nepoužívá, nedokáže už ani vyřešit 2 rovnice o 2 neznámých :-((

takže budu mít 3 rovnice o 3 neznámých a,b,c:

G = a*Ax+b*Ay+c
H = a*Bx+b*By+c
I = a*Cx+b*Cy+c

Toto řešení je jiná metoda nebo nějak souvisí s těmi barycentrickými souřadnicemi?

Se omlouvám, že to moc nechápu..

Offline

 

#6 04. 05. 2009 07:23

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Elfman83:
Ad barycentrické souřadnice:

máme

s1+s2+s3=1
s1*(x1-x3)+s2*(x2-x3)+x3-x=0
s1*(y1-y3)+s2*(y2-y3)+y3-y=0

z toho dostaneme:

s1 = (x-s2*(x2-x3)-x3)/(x1-x3)
s2 = (y-s1*(y1-y3)-y3)/(y2-y3)
s3 = 1-s2-s1

a pak musíme vyřešit tyto rovnice:

s1 = (x-((y-s1*(y1-y3)-y3)/(y2-y3))*(x2-x3)-x3)/(x1-x3)
s2 = (y-s1*(y1-y3)-y3)/(y2-y3)
s3 = 1-s2-s1

???

Offline

 

#7 04. 05. 2009 11:04 — Editoval Rumburak (04. 05. 2009 12:59)

Rumburak
Místo: Praha
Příspěvky: 8691
Reputace:   502 
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Elfman83: 
Ad bar. souř.:  najdeš nejprve čísla  u, v, w  vyhovující  rovnicím  u*A + v*B + w*C = P ,  u + v + w = 1    - to jsou ty bar. souř. bodu P
vzhledem k bodům A, B, C. Číslo R, které chceš přiřadit bodu P,  pak bude  R =  u*G + v*H + w*J .

Téhož efektu lze dosáhnout i "mojí" metodou (pochopil jsi ji správně).  Rovnice  z = f(x,y)  , kde f je funkce definivaná v mém návrhu, je rovnicí roviny,
na níž leží body  [x_A, y_A,  G], [x_B, y_B,  H], [x_C, y_C,  J], takže bod  [x_P, y_P,  f(x_P, y_P)]  leží rovněž v této rovině a o to Ti zřejmě jde.

Metoda bar. souřadnic se používá k obecnějším účelům a proto je i složitější.

Offline

 

#8 04. 05. 2009 13:12

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Rumburak:

Díky.. sice se v tom trochu ztrácím, ale zřejmě to bude ono..

Jen se raději ujistím.. vše, co tedy potřebuji, je zjistit neznámé a,b,c v rovnicích.. a protože jsem s prominutím tele, nechal jsem si tu soustavu vyřešit počítačem.. a teď koukám jako tele..


a = -(cy*h+ay*(i-h)+(by-cy)*g-i*by) div (ax(cy-by)-bx*cy+by*cx+ay(bx-cx))

b = (cx*h+ax*(i-h)+(bx-cx)*g-i*bx) div (ax(cy-by)-bx*cy+by*cx+ay(bx-cx))

c = (ax(cy*h-i*by)+ay(i*bx-cx*h)+(by*cx-bx*cy)*g) div (ax(cy-by)-bx*cy+by*cx+ay(bx-cx))


To jako fakt?

i když, to poslední by se snad dalo vyřešit jako:

c = a*cx+b*cy-i

když budu znát A a B, ne?

Je fakt, že to není tak hrozné, jak to vypadá.. zvlášť, když je tam spousta společných částí..

a = -(cy*h+ay*(ih)+(by-cy)*g-i*by) div K
b = (cx*h+ax*(ih)+(bx-cx)*g-i*bx) div K
c = a*cx+b*cy-i

A když mám A,B,C, tak je jen dosadím do rovnice

R = a*px+b*py+c

a R tedy bude interpolovaná hodnota mezi G,H a I.. doufám..

Offline

 

#9 04. 05. 2009 15:12 — Editoval Rumburak (04. 05. 2009 15:41)

Rumburak
Místo: Praha
Příspěvky: 8691
Reputace:   502 
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

Pokud to potřebuješ řešit pro obecné body A, B, C a obecné hodnoty G,H,I  (v některých zápisech píšeme J místo I), které budou průběžně
zadávány, pak asi jiné cesty není. To, co vyhodil počítač, je řešení soustavy pomocí Cramerovy metody přes determinanty (ale podrobně
jsem to nekontroloval), dynamické vyčíslování těch vzorců počítač snadno zvládne. Pokud budeš na to psát program, je potřeba ošetřit případ,
kdy body A,B,C leží v přímce, což se projeví podmínkou  K = 0  (pak nelze souatavu řešit touto metodou a úloha i ztrácí původní smysl).

Jsou-li body A,B,C a čísla G,H,I  pevně dány, pak se, myslím, vyplatí  vypočítat  čísla a, b, c  ručně pomocí známé eliminační metody.

S tím návrhem vypočítat c podle vzorce c = a*cx+b*cy-i  máš samozřejmě pravdu a stejnětak i dále, je vidět, že nejsi pro matematiku
ztracen (:-)).

Offline

 

#10 04. 05. 2009 16:04

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Rumburak:

Bohužel body ABC a jejich hodnoty GHI (máte pravdu, pomotal jsem to I-J) jsou obecné.

Takže vyjde-li K nula, pak lze jednoduše prohlásit, že bod v trojúhelníku neleží (zjednodušeně řečeno). Nejsem si jist, jestli by vůbec prošel vylučovací metodou, která tomuto předchází (tj. zjišťuje se, zda vůbec bod v trojúhelníku leží)

z2 = (Bx-Ax)*(Py-Ay)-(By-Ay)*(Px-Ax)
z2 = (Cx-Bx)*(Py-By)-(Cy-By)*(Px-Bx)
z3 = (Ax-Cx)*(Py-Cy)-(Ay-Cy)*(Px-Cx)

pro všechna Z<0 nebo všechna Z>0 leží..

Každopádně mám (snad) vše, co jsem potřeboval..

Děkuji za Váš čas a hlavně trpělivost :-)

P.S.: Mě v matematice šly tak možná jen derivace a trochu integrály.. řešení soustav rovnic nebo logaritmů je nad mé chápání :-)

Offline

 

#11 04. 05. 2009 16:53 — Editoval Rumburak (05. 05. 2009 08:57)

Rumburak
Místo: Praha
Příspěvky: 8691
Reputace:   502 
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Elfman83: Jenom ještě dvě "maličkosti":

1) Zmatky okolo I, J mám na svědomí já (viz příspěvek č. 4, kde jsem omylem zavedl I).

2) K= 0 neznamená, že bod P "neleží v troiúhelníku ABC", ale že trojúhelník ABC neexistuje (ježto body A,B,C leží na společné přímce).
Má-li se testovat, zda bod P leží v onom trojúhelníku, pak bude nejspíš nutno vypočítat ty barycentrické souřadnice bodu P a otestovat je
co do znaménka. Význam jejich znamének je následující:

     všechny b.s. kladné                                    znamená, že  bod P leží     uvnitř trojúhelníka,
     všechny b.s. nezáporné a některá nulová                 - " -                     na některé jeho straně včetně vrcholů,
     některá b.s. záporná                                               - " -                     vně trojůhelníka.
   
Nějaká jiná a na výpočet méně náročná metoda, jak toto ověřit, mne nenapadá. Leda snad následující způsob, i když ani ten není početně triviální:
Vyjádříme si   
                       A(x,y) = 0 rovnici přímky BC,   
                       B(x,y) = 0 rovnici přímky AC,     
                       C(x,y) = 0 rovnici přímky AB,

a dále               T = (1/3) (A + B + C)   těžiště trojúh. ABC. 

Potom plat:  bod P leží uvnitř trojůhelníku ABC, právě když

                     A(P) má stejné znaménko jako A(T)
     a zároveň  B(P) má stejné znaménko jako B(T)
     a zároveň  C(P) má stejné znaménko jako C(T).

Offline

 

#12 05. 05. 2009 07:25

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

↑ Rumburak:

Děkuji, ale myslím, že tak podrobně to řešit nebudu potřebovat.. jednoduše, pokud je trojúhelník přímka, tak šance, že se do něj bod trefí je téměř nula, a kdyby snad, tak pro K=0 jednoduše odmítnu řešit danou situaci (což v daném případně měla být kolize) a prohlásím (jasně, že ne matematicky správně, ale z hlediska programu, pro který je algoritmus určen), že bod polygonem/trojúhelníkem prošel bez kolize..

Sice to není úplně košér, ale mám snahu to co nejvíce zjednodušit.. což už se myslím docela povedlo.. opět žádné matice :-) (je tam pár výpočtů, které se počítají podobně jako vektory, ale násobit 6 dvojic čísel je určitě lepší než násobit 2 matice 4x4).

Ale raději se matematice budu vyhýbat... takové ty typy, které nejsou úplně ztracené, ale přitom o tom nic nevědí, jsou nejhorší :-))

Offline

 

#13 05. 05. 2009 08:19

Elfman83
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Pozice bodu v trojúhelníku vůči jeho vrcholům

Ještě dodatek, kdyby to někdo potřeboval řešit přes ty barycentrické souřadnice (nemusí to být nutně správně, ale snad to někoho v případě nouze nakopne):

Tyto souřadnice s1-s3 se pro body B1-B3 (kterým odpovídá 2D souřadnice x1-x3 a y1-y3) a bod P (kterému odpovídají x a y) vypočtou:

s1+s2+s3=1
s1*(x1-x3)+s2*(x2-x3)+x3-x=0
s1*(y1-y3)+s2*(y2-y3)+y3-y=0

tj.:

s1 = (x(y3-y2)+x2(y-y3)+x3(y2-y))/(x1(y3-y2)+x2(y1-y3)+x3(y2-y1))
s2 = (y-s1*(y1-y3)-y3)/(y2-y3)
s3 = 1-s2-s1

a hodnotu R u bodu P pak vypočteme jako:

P = s1*G+s2*H+s3*I

Snad to mám dobře.. kdyžtak mne pak někdo prosím opravte :-) Díky..

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson