none
Line intersects a circle GDI C#

    Dotaz

  • I working in GDI at C#. My application runs on Windows Form.


    User click on form and set point A, point B and next application drawLine AB.

    Then user click on point C which is under or below the line and application must calculate position of point D. Point D must be a center of circle because i need drawCircle and this circle must intersects with the line in only ONE point.

    Bud i don't know how to do it. Some idea to solve this ?

    pátek 6. března 2015 22:28

Odpovědi

  • Fakt se nějak míjíme v chápání problému. Mě to připadá že se ptáš na programátorské řešení ale ve skutečnosti nevíš matematické řešení.

    Proč by C[x] mělo být rovné D[x]? Vždyť to porušuje ten předpoklad že body C a D mají být na stejné straně přímky. Pokud se podíváš na všechny bodu splňující C[x]=D[x] tak se dostaneš i na opačnou stranu té přímky.

    Mimochodem z toho obrázku to vůbec nevyplývá. Tam vůbec není vidět že C[x]=D[x].

    Podle mě nejde bod D vypočíst z C. Z něj si můžeš pouze vzít směr té kolmice (protože kolmice na přímku má 2 změry).

    Nebo v zadání je ještě něco co jsi neřekl.

    .

    1. Nejprve si zvol bod na přímce, kde kolmice bude (ideálně co nejblíže středu obrazovky). Pojmenuj ho T

    2. Pak si vypočti směr kolmice (úhel), kterým se chceš dát (jestli je bod C nad nebo pod přímkou). Stačilo by i spočítat směrnici.

    3. Pak si posuň začátek souřadnic do T

    4. Spočti střed kručnice od T=[0,0] do D[x,y]. Nevím co znáš z goniometrie, stačí třeba sinus a kosinus (teoreticky to mohou vyjít 2 body ale ty vyber ten který je ve správném směru).

    https://msdn.microsoft.com/en-us/library/system.math.sin%28v=vs.110%29.aspx

    https://msdn.microsoft.com/en-us/library/system.math.cos%28v=vs.110%29.aspx

    Nebo to spočítej z té směrnice.

    5. Pak (když znáš D) nakresli kružnici


    JCH

    pátek 13. března 2015 8:30

Všechny reakce

  • A jak v tom figuruje ten bod C?

    Tím má ta kružnice také procházet? A jak přesně?

    Pokud jakkoliv tak to má nekonečně mnoho řešení.


    JCH

    pondělí 9. března 2015 16:50
  • bod C je lubovolny bod nad priamkou, nasledne sa zada polomer kruznice a musi sa vyratat stred kruznice tak aby sa tato kruznica dotykala priamky..... http://uloz.to/x1K65TEG/bez-nazvu-jpg

    • Upravený marek11 pondělí 9. března 2015 21:15
    pondělí 9. března 2015 21:14
  • Takže bod C musí být uvnitř kruhu?

    Nebo jak jinak souvisí s tou kružnicí. Mě to pořád připadá že bod C a ta kručníce jsou naprosto nesouvisející problémy. 

    Nebo tak souvoslost prostě nevidím.

    Pokud jde o ten poloměr, tak se zadá někde na klávesnici nebo jak se zadá velikost poloměru. Pokud ano, tak je to klasický geometrický problém. Stačí stanovit kolmici na přímce a na ní po určit bod ve vzdálenosti poloměru. Tím je zaručeno že se kružnice dotkne přímky v jediném bodě.

    Ten problém je spíše matematický než programátorský. Stačí počítat v kartéských souřadnicích.


    JCH

    úterý 10. března 2015 9:14
  • bod C iba oznacuje ze sa ma kruznica nachadzat nad useckou, polomer je zadany cez dialogove okno takze toto funguje

    presne ako pisete treba vypocitat tu kolmicu a na nej bod vo vzdialenosti polomeru a to bude novy stred kruznice, matematicky na papieri je to jednoduche, no preniest to do C# GDI je pomerne dost znacny problem

    úterý 10. března 2015 21:57
  • Nevím kde v tom vidíš problém.

    Vyber si jakýkoliv bod na přímce  a spočítej klesání (spoupání přímky).

    Pak od toho bodu vypočítej vzálenost a jako směr ven o 90% ke stoupání přímky. V kartéských souřadnicích to přece není žádný velký problém.

    Když si to neumíš představit, posuň si do toho bodu počátek kartéských součadnic.

    Bod na přímce tedy bude v [0,0] a poloměr bude v [X,Y] který je vzdálen r ve směru kolmém na přímku.

    .

    Opravdu tady musím napsat matematické vzorce?


    JCH

    středa 11. března 2015 9:48
  • Ale ja nemozem posunut suradnicovu os pretoze ja poznam iba bod C........suradnica D[x] == C[X]..........ale suradnica D[y] je uplna ina ako C[Y]...........a prave tu C[y] potrebujem 

    tu je to pekne vidiet 

    http://uloz.to/x1K65TEG/bez-nazvu-jpg

    čtvrtek 12. března 2015 16:24
  • Fakt se nějak míjíme v chápání problému. Mě to připadá že se ptáš na programátorské řešení ale ve skutečnosti nevíš matematické řešení.

    Proč by C[x] mělo být rovné D[x]? Vždyť to porušuje ten předpoklad že body C a D mají být na stejné straně přímky. Pokud se podíváš na všechny bodu splňující C[x]=D[x] tak se dostaneš i na opačnou stranu té přímky.

    Mimochodem z toho obrázku to vůbec nevyplývá. Tam vůbec není vidět že C[x]=D[x].

    Podle mě nejde bod D vypočíst z C. Z něj si můžeš pouze vzít směr té kolmice (protože kolmice na přímku má 2 změry).

    Nebo v zadání je ještě něco co jsi neřekl.

    .

    1. Nejprve si zvol bod na přímce, kde kolmice bude (ideálně co nejblíže středu obrazovky). Pojmenuj ho T

    2. Pak si vypočti směr kolmice (úhel), kterým se chceš dát (jestli je bod C nad nebo pod přímkou). Stačilo by i spočítat směrnici.

    3. Pak si posuň začátek souřadnic do T

    4. Spočti střed kručnice od T=[0,0] do D[x,y]. Nevím co znáš z goniometrie, stačí třeba sinus a kosinus (teoreticky to mohou vyjít 2 body ale ty vyber ten který je ve správném směru).

    https://msdn.microsoft.com/en-us/library/system.math.sin%28v=vs.110%29.aspx

    https://msdn.microsoft.com/en-us/library/system.math.cos%28v=vs.110%29.aspx

    Nebo to spočítej z té směrnice.

    5. Pak (když znáš D) nakresli kružnici


    JCH

    pátek 13. března 2015 8:30