Viac

Vie niekto funkciu, ktorá by určila, či bod leží na krivke?

Vie niekto funkciu, ktorá by určila, či bod leží na krivke?


ArcEngine 10 .Net 4 c#

Aktuálne povoľujem používateľovi vybrať bod na krivke a vytvoriť bod na čiare. Používam nástroj na prichytenie.

Chcem sa len uistiť, že keď používateľ klikne na obrazovku, bodová spätná väzba, ktorú dostanem, leží v hornej časti krivky.

Zaujímalo by ma, či existuje metóda, ktorou by som mohol skontrolovať, či je IPOINT ZAPNUTÝ na niektorej z kriviek vo vrstve krivky.


Pravdepodobne existuje jednoduchší spôsob, ako to urobiť, ale toto robím.

// vrstva je to, akú vrstvu kontrolujete ESRI.ArcGIS.Carto.IIdentify identify1 = vrstva ako IIdentify; // idGeo je IGeometry, na ktorý sa chcete pýtať -vo vašom prípade bod, ale ja tu používam štvorec IArray pole = identify1.Identify (idGeo); if (pole! = null) {objekt obj = pole.get_Element (0); IFeatureIdentifyObj fobj = obj ako IFeatureIdentifyObj; IRowIdentifyObject irow = fobj ako IRowIdentifyObject; IFeature feature = irow.Row as IFeature; IGeometry geometry1 = feature.Shape; IPointCollection pc = geometry1 ako IPointCollection; if (pc! = null && pc.PointCount> 0) // then its a polyline}

Na to by ste pravdepodobne mohli použiť rozhranie iHitTest. http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//002m0000021v000000

Používam iba VB, takže nemám poruke príklad. Tu je príklad verzie 9.3: http://resources.esri.com/help/9.3/ArcGISEngine/arcobjects/esriGeometry/IHittest_HitTest_Example.htm


Ak používate arcgis, jednoducho vytvorte novú vrstvu topológie, nastavte pravidlo tak, že body sú zakryté čiarami, potom topologický nástroj overí údaje, ktoré ste zadali, a v prípade, že existuje, zobrazí chyby.


Ak chcete určiť, na ktorú stranu čiary z $ A = (x_1, y_1) $ do $ B = (x_2, y_2) $ a bod $ P = (x, y) $ pripadá, musíte vypočítať hodnotu:- $ d = (x-x_1) (y_2-y_1)-(y-y_1) (x_2-x_1) $ Ak $ d & lt0 $, potom bod leží na jednej strane čiary a ak $ d & gt0 $, potom leží na druhej strane . Ak $ d = 0 $, potom bod leží presne v priamke.

Ak chcete zistiť, či sú body na ľavej strane riadku body s kladnými alebo zápornými hodnotami, vypočítajte hodnotu $ d $ pre bod, o ktorom viete, že je naľavo od riadka, napríklad $ (x_1-1, y_1) $ a potom porovnajte znamienko s bodom, ktorý vás zaujíma.

Dodatok:

Pre úplnosť je vysvetlenie, ako to funguje, nasledujúce:

Smer čiary $ AB $ je možné definovať ako ltx_2, y_2 & gt - & ltx_1, y_1 & gt = & ltx_2 - x_1, y_2 - y_1 & gt $

Ortogonálny (kolmý) smer k tejto čiare bude $ vec n = & lty_2 -y_1, -(x_2 -x_1)> gt $ (prevrátime x a y a negujeme jednu zložku, tj (y's, -x's)). Môžete si overiť, že je to ortogonálne, tak, že vezmete bodový výrobok s pôvodnou hodnotou a skontrolujete, či je 0).

Jeden z možných vektorov prechádzajúcich z čiary do bodu $ P $ je $ D = P-A = & ltx-x_1, y-y_1 & gt $

Tento vektor $ D $ je vyrobený z 2 komponentov, komponentu $ D^< paralelného> $, ktorý je rovnobežný s čiarou $ AB $ a komponentu $ D^< bot> $, ktorý je kolmý na priamku $ AB $ . Podľa definície $ D^ < paralelné> cdot vec n = 0 $. Pretože smer rovnobežný s čiarou bude kolmý na normálu tejto čiary.

Zaujíma nás, či je bod na strane, na ktorú smerujú normálne body, alebo na strane, na ktorej sú normálne body oproti. Inými slovami, chceme vedieť, či je $ D^< bot> $ v rovnakom smere ako $ vec n $ alebo nie.

Toto je v podstate znak bodového súčinu $ D $ a $ vec n $, pretože $ D cdot vec n = (D^ < bot>+ D^ < paralelné>) cdot vec n = D ^ < bot> cdot vec n $

Aritmeticky: $ & ltx -x_1, y -y_1 & gt cdot & lty_2 - y_1, - (x_2 - x_1) & gt $ $ = (x -x_1) (y_2 - y_1) - (y -y_1) (x_2 - x_1) $

Stručne povedané, vypočítame podpísanú najkratšiu vzdialenosť od priamky $ AB $ k bodu $ P $ a potom vyhodnotíme znamienko tejto vzdialenosti.


Upraviť - Toto je trápne

Keď trochu viac premýšľame o maximalizáciách v písmenách b) ac), je zrejmé, že riešia rovnaký program, a preto bolo celé toto cvičenie zle postavené.

Napíšte začať sup_ < beta_ <-k> v mathbb^, beta_k = 0> L (y, boldsymbol < beta>) & amp = sup_ < beta_ <-k> in mathbb^, beta_k = 0> L (y, [ beta_ <-k>, beta_k]) & amp = sup _ < beta in mathbb^k> začať L (y, [ beta_ <-k>, beta_k]) & amp beta_k = 0 - infty & amp beta_k neq 0 end & amp = sup _ < beta v mathbb^k> začať L_ <-k> (y, beta_ <-k>) & amp beta_k = 0 - infty & amp beta_k neq 0 end & amp = sup_ < beta_ <-k> v mathbb^> L_ <-k> (y, beta_ <-k>) end


2 odpovede 2

V takom prípade vytvorte ortogonálnu projekčnú maticu orientovanú pozdĺž tejto normály, potom transformujte vrcholy trojuholníka a váš bod násobením a malo by sa stať jednoduchou 2D kontrolou, aby ste zistili, či bod leží v trojuholníku (objeme).

Okrem toho by ste tiež získali hodnotu Z, ktorú by ste mohli použiť na odhodenie bodov príliš vysoko nad trojuholníkom.

LookAtLH je spôsob, akým to môžete urobiť napríklad v D3D/XNA, EyePosition by mohol byť stredom vášho trojuholníka, Focus by bolo EyePosition + normálne a smerovanie by malo byť čokoľvek kolmé na to, t.j. akýkoľvek z vrcholov trojuholníka by mal fungovať.

Som si istý, že môžete nájsť zdroj pre podobnú transformačnú maticu LookAt s trochou googlenia, ak nechcete používať celú knižnicu iba pre jednu funkciu.

Na matematickú komunitu Stack Exchange existuje vynikajúca odpoveď na túto otázku: Zistite, či je projekcia 3D bodu na rovinu v rámci trojuholníka. Čo je zasa len súhrn tohto príspevku v časopise Journal of Graphics Tools: Wolfgang Heidrich, 2005, Computing the Barycentric Coordinates of a Projected Point, Journal of Graphics Tools, pp 9-12, 10 (3).


2 odpovede 2

Toto je jeden zo spôsobov, ako získať niečo podobné tomu, čo popisujete. Napísal som to ako algoritmus, ale som si istý, že niekto by mohol prejsť a nájsť všeobecný matematický výraz pre konečnú polohu „váženého“ bodu v zmysle 4 počiatočných bodov.

  1. Zistite proporcie „hmotnosti“, ktoré má každý roh v porovnaní s jeho opakom. Povedzme, že TL (vľavo hore) má 100, TR má 200, BR má 300 a BL má 400. Potom má TL 1/4 hmotnosti na svojej uhlopriečke, kde BR má ostatné 3/4. A TR má 1/3, kde BL má 2/3.
  2. Začnite WP („vážený“ bod) v TL. Posuňte ho po diagonále TL-BR o rovnaký podiel vzdialenosti k BR ako proporcionálnu hmotnosť TL.
  3. Vykreslite čiaru rovnobežnú s uhlopriečkou TR-BL, ktorá prechádza aktuálnou polohou WP. Tiež určte priesečníky tejto čiary s hranicou štvoruholníka určeného 4 bodmi.
  4. Posuňte WP pozdĺž tejto čiary do bodu, kde pretína hornú hranicu štvoruholníka.
  5. Posuňte WP späť po čiare o takú vzdialenosť, aby pomer vzdialenosti posunutej k vzdialenosti k ďalšiemu hraničnému bodu, ktorý čiaru pretína, bol iba proporcionálnou hmotnosťou TR.

Teraz by mal byť WP tam, kde ho chcete.

Na mojom príklade z kroku 1 by tu malo byť WP v každom kroku za predpokladu, že štyri body sú vrcholy jednotkového štvorca.


3 odpovede 3

Pretože je polygón konvexný, je to jednoduché! Dva vrcholy idú za sebou, ak sú všetky ostatné vrcholy umiestnené na tej istej strane priamky, ktorá prechádza týmito dvoma bodmi. To znamená, že krížový produkt vektora predstavuje jeden z piontov k druhému s vektorom od prvého bodu k akémukoľvek ďalšiemu v polygóne má rovnaké znamienko (všetky negatívne alebo všetky pozitívne). Ak sa napríklad tieto dva body nazývajú $ P_1 $ a $ P_2 $, mali by ste vypočítať všetky krížové súčinky $ langle P_1, P_2 rangle $ s $ langle P_1, P_i rangle $ ($ P_i $ tu znamená všetky ostatné vrcholy).

Tiež, ako je uvedené v komentári, niektoré máme degenerované prípady. Degenerovaný prípad je bežným javom vo výpočtovej geometrii, ktorý sa väčšinou rieši oddelene. Tu je degenerovaný prípad tri body umiestnené na priamke.

Vzhľadom na to, že polygón je konvexný, jeho ťažisko $ C $ je v jeho útrobách. Otestujte prechody riadkov $ CV $ pre každý vrchol $ V $. To dáva lineárny časový test.

Alternatívou k odpovedi OmG (ktorá je skvelá) by bolo triedenie bodov do usporiadaného poľa, kde môžete nájsť susedov s bodmi pohľadom na body na oboch stranách. Táto metóda by bola veľmi dobrá, ak potrebujete pri mnohých výpočtoch pracovať s rovnakým mnohouholníkom, pretože väčšina práce sa robí vopred, ale potom sú náklady na určenie, či sú dva body susedmi, veľmi malé.

Ako teda zoradíme pole?

Povedzme, že máme pole našich netriedených bodov, kde každý bod obsahuje súradnice x a y.

Najprv chceme nájsť body úplne vľavo a vpravo, tj najvyššie a najnižšie hodnoty x. Táto funkcia by vyzerala takto:

Bod úplne vpravo by bol takmer identický, ale menej ako by bolo vymenené za väčšie než.

Ďalej si predstavíme, že nakreslíme čiaru od nášho krajného bodu do pravého bodu. Potom zoskupíme všetky zostávajúce body do dvoch kategórií, a to pod čiarou a nad ňou.

Teraz za predpokladu, že sme uložili všetky body pod/nad do ich vlastných polí, máme všetky informácie potrebné na zostavenie nášho zoradeného poľa alebo bodov.

  1. Východiskový bod si zvolíme ako bod úplne vľavo
  2. Potom sčítame všetky hodnoty v poli nad x vo vzostupnom (najmenšom prvom) poradí.
  3. Pridajte pravý bod
  4. Pridajte hodnoty do poľa pod x-zostupne (najväčšie prvé)

Výsledkom je pole, kde sa každý bod pripája k ďalšiemu bodu v poli a konečný bod sa pripája späť k prvému. Všimnite si toho, že táto metóda dáva výsledok nepretínajúceho sa mnohouholníka bez ohľadu na to, či je vstup konvexný alebo konkávny. Výstup bude zaručene konvexný iba vtedy, ak je vstup zaručene konvexný.

Úplnejší kód nájdete nižšie

A máme to! a teraz je ľahké skontrolovať, či sú body vedľa seba, niečo ako:


Sú reklamy na YouTube, ktoré žiadajú o dary pre choré deti prostredníctvom portálu drive.com, podvod?

V posledných týždňoch mi YouTube prostredníctvom reklamy na crowdfundingové stránky s názvom Drove zobrazuje reklamu, v ktorej žiadam o dary na pomoc pri platení účtov za choré deti.

Reklamy však pôsobia veľmi podozrivo. V jednom prípade dieťa s názvom Tovi na nemocničných posteliach hovorí po slovensky o tom, že je veľmi choré a bojí sa smrti, ak nedostane správnu liečbu, ale nie sú uvedené žiadne podrobnosti o tejto chorobe. Potom hovorí, že v Bostone je lekár, ktorý jej môže pomôcť, ale opäť nie sú uvedené žiadne podrobnosti. Potom budete požiadaní o darovanie prostredníctvom drive.com, ale zostáva nejasné, na čo presne budú peniaze použité alebo koľko je to potrebné. Zdá sa, že celá reklama je vyhotovená so zábermi modeliek, ktoré pôsobia ako lekári a farmaceuti, a údajná nemocnica v Bostone je len budova, na ktorej je napísané slovo „hospitalizácia“, ale žiadne meno.

Všetko o tomto kričí & quotscam & quot, ale zaujímalo by ma, či je celá stránka Drove podvodom, alebo iba táto kampaň. Tiež by ma zaujímalo, ako je možné, že taký podvod zostane na YouTube niekoľko týždňov bez toho, aby bol stiahnutý. Akému orgánu by ste takúto vec vôbec nahlásili?

Je možné, že ide o nejaký polovičný podvod, a sú to vlastne choré deti, ale kampaň je zámerne nejasná o tom, koľko peňazí je potrebných a aká časť darov je v skutočnosti určená deťom, aby si mohli nárokovať legitímnosť, aj keď deti z kampane dostanú len malú čiastku?

Dúfam, že na to môže niekto vniesť svetlo, aby ľudia, ktorí premýšľajú, či darovať alebo nie, našli túto otázku a urobili informovanejšie rozhodnutie.


Dokážte, že paralelný postulát Euclida je na hyperboloidnom modeli nepravdivý

Uvažujme dvojrozmerný prípad, tj. Hyperbolické miesto. Definujte náš hyperboloid ako množinu bodov $ x = (x_1, x_2, x_3) $ v 3 -medzere (poznámka: minkowského priestor, ale nie je potrebná pre tento problém), ktoré spĺňajú $ x_1^2 - y_1^2 - z_1^2 = 1 $ a $ x_1 & gt0 $. Hyperbolická čiara je definovaná ako priesečník roviny, ktorá prechádza počiatkom s hyperboloidom. Dva odlišné hyperbolické body (body na hyperboloide) určujú hyperbolickú čiaru. Na objasnenie zvážte výkres označený [2] na tomto obrázku (z tejto webovej stránky):

Chcel by som dokázať niečo, čo sa zdá byť intuitívne jasné:

Vzhľadom na hyperbolický riadok $ h $ a hyperbolický bod $ p $ nie na $ h $, existuje nekonečne veľa hyperbolických čiar cez $ p $, ktoré sa nepretínajú $ h $.

(poznámka: toto je hyperbolický variant Euclidovho paralelného postulátu)

Môj pokus o dôkaz začína takto:

Z definície máme, že $ h $ je priesečníkom roviny $ m_1 $ určenej dvoma odlišnými hyperbolickými bodmi a pôvodom s hyperboloidom. Pretože $ p $ nie je obsiahnuté v $ h $, máme za to, že $ p $ nemôže byť obsiahnuté ani v $ m_1 $, takže každá hyperbolická čiara ohraničená $ p $ je priesečníkom inej roviny $ m_2 $, určenej $ p $, pôvod a niektoré body $ s $, s hyperboloidom. $ m_1 $ a $ m_2 $ sú teda odlišné roviny, ale pretože sa stretávajú aspoň v jednom bode, pôvode, nemôžu byť rovnobežné, a preto z euklidovskej geometrie vieme, že ich priesečníkom je priamka $ l $. Pretože $ h $ je na hyperboloide, ak sa $ l $ a $ h $ pretína, znamená to, že hyperbolický riadok prekračujúci $ p $ pretína $ h $ v hyperbolickom bode, takže chceme ukázať, že existujú nekonečné spôsoby výberu bod $ s $, aby sa $ h $ a $ l $ nepretínali.

a v tomto mieste som chcel použiť topologický argument, aby som ukázal, že môžeme vybrať nekonečne viac bodov $ s $ tak, aby sa $ h $ a $ l $ nepretínali ako nie. Ale nemohol som to urobiť, myslím, že moja metóda môže byť vypnutá a že algebra je lepšia cesta. Vie tu niekto, ako to ukázať, alebo ma môže upozorniť na referenciu s dôkazom?


Čo je fázový posun v trigonometrii a ako ich môžem určiť v grafe?

Som študent, ktorý sa pred prepočtom učí o transformáciách goniometrických funkcií, a som veľmi zmätený z definície fázového posunu (a preto som veľmi, veľmi frustrovaný).

Učíme sa o funkciách týchto dvoch všeobecných foriem:

Definícia fázového posunu, ktorú sme dostali, bola nasledovná: „Horizontálny posun vzhľadom na určitú referenčnú vlnu.“

Potom nám bol poskytnutý nasledujúci graf (a okrem toho, že to neboli žiadne ďalšie informácie, išlo o transformovanú sínusovú alebo kosínusovú funkciu jednej z vyššie uvedených foriem):

(Ignorujte moje vymazané značenia ceruzkou v grafe!)

Boli sme požiadaní, aby sme našli fázový posun grafickej funkcie vzhľadom na kosínusovú nadradenú funkciu $ y = cos (x) $. Tiež sme boli požiadaní, aby sme našli fázový posun grafickej funkcie vzhľadom na funkciu sínusového rodiča $ y = sin (x) $. (Naše odpovede by samozrejme boli odhadmi na základe grafu.)

Bol som úplne zmätený. Vyššie uvedená definícia mi nehovorila prakticky nič, čo by som chcel vedieť. A keď som požiadal učiteľku o vysvetlenie, moje zmätky to neskončilo. Má tu niekto dobré vysvetlenie toho, čo je fázový posun, a možno aj to, ako (vzhľadom na solídne znalosti definície) by som mohol pokračovať v riešení vyššie uvedeného problému s grafom?


Schéma zapojenia tohto modrého 12V spínača?

Hľadám schému zapojenia alebo nejaké informácie o vnútorných prepojeniach tohto výhybky z éry modrého vlaku.

Používa sa na ovládanie automatických bodov a je viditeľný na pôvodnom poli:

Body sa pripájajú k zadnej časti prepínača pomocou 3-pólového konektora:

Chcem používať mikrokontrolér na ovládanie bodov bez ručného stláčania tlačidiel. Keďže nič z toho nemám, nemôžem zmerať pripojenia (pomocou multimetra).

Vlastní niekto tento prepínač a chce zdieľať niektoré informácie?

Takto si myslím, že vypínač funguje. Skúsil som to zapojiť týmto spôsobom a funguje to, ale body sa sotva pohybujú. Možno problém spočíva v solenoidoch vo vnútri bodov?


Pozri si video: Capricorn o impacare neasteptata cu un Taur sau cu cineva dintr-o zodie de aerfoc!