Ei ole koulutehtävä, eikä itseasiassia ongelmana loopit yms. vaan puhdas matematiikka, että miten valitaan pisteelle lähin kolmio.
Nyt en ihan ymmärtänyt tuota ympyrän säde hommaan. Niinkö että pisteelle annetaan jokin säde, jotta saadaan selville kolmion sivu, jonka se lähimpänä leikkaa?
Nyt yritän etsiä lähintä kolmiota selvittämällä jokaisen kolmion sivun ja pisteen välisen suorakulmaisen etäisyyden ja valitsen kolmion jossa välimatka on lyhin. Tämä toimii n90% tapauksista...
Ei kyllä voi toimia niin että lasketaan kolmion keskipisteestä etäisyyttä ja valitaan se jolla on lyhin etäisyys. Esim toisessa kolmiossa sivun mitta voi olla vaikka 1000 ja toisessa 10. Kuitenkin 1000 mittainen kolmio voi olla lähempänä.Äkkiä miettien ainakaan varsinaista etäisyyttä ei tarvitse laskea. Etäisyyden voi laskea Pythagoraan kaavalla, jos vain pystyy määrittelemään kolmiosta sen pisteen joka on lähimpänä pistettä. Etäisyys siis vaatisi vielä neliöjuurta, mutta sen laskeminen on turhaa.
Lähimmän pisteen saisi kyllä laskettua ainakin niin, että piirrät kolmion keskipisteestä suoran viivan pisteeseen. Lähin kohta on se, missä tämä viiva leikkaa kolmion reunan. Se näistä kohdista, mikä on lähimpänä on lähin kolmio.
Ei kylläkään kovin tehokas tapa, joten voi olla että tähän on parempikin algoritmi.
Tätä minäkin ajattelin, mutta ongelmana taitaa olla tämmöinen, valitaanko kolmio 1 vai 2. Pisteet punaisella ja sinisellä.Ei ehkä tehokkain tapa, mutta voisit lähteä liikkeelle siitä, että purat kolmiot kolmeen vektoriin. Vektorin etäisyyden pisteeseen voit laskea esim näillä ohjeilla: Shortest distance between a point and a line segment
Vektorit sitten jotenkin liität siihen kolmiotietoon. En ainakaan äkkiseltään keksi mitään suoraa ratkaisua, jos puhutaan puhtaasti yksinkertaisesta ohjelmoinnista. Toki jos kyseessä on joku pelikehitys tmv. niin varmasti valmiita kirjastoja tuollaisen laskentaan.
Mikä tuossa on ongelma? Kyllä tuon etäisyys suoralle -ratkaisun pitäisi toimia. Neliöjuuria ei tosiaan kannata laskea kuin vasta jos on ihan pakko.Tätä minäkin ajattelin, mutta ongelmana taitaa olla tämmöinen, valitaanko kolmio 1 vai 2. Pisteet punaisella ja sinisellä.
Eikö tuossa ole silloin ihan sama kumpi valitaan tai valitaan molemmat, jos etäisyys on tismalleen sama?Se että kumpi kolmio valitaan, kun suorakulmainen etäisyys sekä 1 ja 2 kolmion verteksiin on sama.
Nopeudella ei ole merkitystä, eli voidaan käyttää neliöjuurta jos halutaan. Ei ole peli.
Ei. Koska toinen kolmio on lähempänä, kuten kuvasta näkyy. Suorakulmainen etäisyys on kuitenkin sama.Eikö tuossa ole silloin ihan sama kumpi valitaan tai valitaan molemmat, jos etäisyys on tismalleen sama?
No joku lisäkriteeri sitten jos niille pitää joku ero saada. Esim. etäisyys kaikkiin kolmion kulmiin yhteensä -> pienempi "lähempänä".Se että kumpi kolmio valitaan, kun suorakulmainen etäisyys sekä 1 ja 2 kolmion verteksiin on sama.
Jos lyhin etäisyys on sama, niin eihän se toinen silloin ole lähempänäEi. Koska toinen kolmio on lähempänä, kuten kuvasta näkyy. Suorakulmainen etäisyys on kuitenkin sama.
Ehkä joo tämä voisi toimia. Ei ollut alkuperäisessä kysymyksessä toki, kun tätä tässä samalla yritän pohtia..No joku lisäkriteeri sitten jos niille pitää joku ero saada. Esim. etäisyys kaikkiin kolmion kulmiin yhteensä -> pienempi "lähempänä".
Mutta tätä ei ollut alkuperäisessä kysymyksessä.
Eikö tuosta näe että sininen piste on lähempänä 2 kolmiota, vaikka etäisyys on sekä 1 että 2 kolmioon sama.Jos lyhin etäisyys on sama, niin eihän se toinen silloin ole lähempänä
tässä taitaa tulla ongelmaksi tämä, eli jos tuon kakkoskolmion terävä kärki karkaa todella kauas, jolloin kärkien yhteenlaskettua etäisyyttä laskemalla saadaan lähimmäksi kolmioksi ykkönen.:No joku lisäkriteeri sitten jos niille pitää joku ero saada. Esim. etäisyys kaikkiin kolmion kulmiin yhteensä -> pienempi "lähempänä".
Mutta tätä ei ollut alkuperäisessä kysymyksessä.
Siis onko kolmio 2 kolmion 1 sisällä?Eikö tuosta näe että sininen piste on lähempänä 2 kolmiota, vaikka etäisyys on sekä 1 että 2 kolmioon sama.
Ei ole kolmiot toistensa sisälläSiis onko kolmio 2 kolmion 1 sisällä?
Toisaalta ei tämäkään muuta asiaa mihinkään jos vain haetaan mitä tahansa kolmion pistettä joka on lähinnä.
Jos taas haetaan esim. kolmion massakeskipistettä, niin sitten pitää laskea sillä.
Nyt en kyllä enää ymmärrä mitä tässä yritetään laskea? Alkuperäsisessä kuvauksessa annoit ymmärtää, että haetaan raa'asti lähintä kolmiota, eli mitataan etäisyys kolmion lähimpään sivuun/kulmaan ja valitaan se kolmio. nyt tässä taas mietitään kärkivälejä? Eikö tämä jälkimäinen skenaario nyt ratkea sillä, että lasket kolmioiden keskipisteen ja siitä mittaat etäisyyden sitten pisteisiin x,y,z?tässä taitaa tulla ongelmaksi tämä, eli jos tuon kakkoskolmion terävä kärki karkaa todella kauas, jolloin kärkien yhteenlaskettua etäisyyttä laskemalla saadaan lähimmäksi kolmioksi ykkönen.:
Valitaan vain kaks lähintä kulmaa jokaiselta kolmiolta?tässä taitaa tulla ongelmaksi tämä, eli jos tuon kakkoskolmion terävä kärki karkaa todella kauas, jolloin kärkien yhteenlaskettua etäisyyttä laskemalla saadaan lähimmäksi kolmioksi ykkönen.:
Eikö tässä kakkosen lähin piste ole huomattavasti lähempänä kuin ykkösen jolloin muuta ei enää tarvita?tässä taitaa tulla ongelmaksi tämä, eli jos tuon kakkoskolmion terävä kärki karkaa todella kauas, jolloin kärkien yhteenlaskettua etäisyyttä laskemalla saadaan lähimmäksi kolmioksi ykkönen.:
Kolmion keskipisteestä ei tosiaan tarvitse laskea etäisyyttä, tarkoitin että se vertailtava piste on se kohta, jossa kolmion keskipisteestä lähtevä viiva leikkaa kolmion sivun. Tuo piste on kolmion lähin kohta.Ei kyllä voi toimia niin että lasketaan kolmion keskipisteestä etäisyyttä ja valitaan se jolla on lyhin etäisyys. Esim toisessa kolmiossa sivun mitta voi olla vaikka 1000 ja toisessa 10. Kuitenkin 1000 mittainen kolmio voi olla lähempänä.
Edelleen haetaan raa'asti lähintä kolmiota. Kumpi kolmion keskipiste on lähempänä sinistä pistettä? Ykköskolmion keskipiste voi olla lähmpänä, varsinkin jos tuo kakkoskolmion kärki karkaa todella kauas. Kuitenkin kakkoskolmio on sinistä pistettä lähempänä.Nyt en kyllä enää ymmärrä mitä tässä yritetään laskea? Alkuperäsisessä kuvauksessa annoit ymmärtää, että haetaan raa'asti lähintä kolmiota, eli mitataan etäisyys kolmion lähimpään sivuun/kulmaan ja valitaan se kolmio. nyt tässä taas mietitään kärkivälejä? Eikö tämä jälkimäinen skenaario nyt ratkea sillä, että lasket kolmioiden keskipisteen ja siitä mittaat etäisyyden sitten pisteisiin x,y,z?
Ei mene näin. Tällä tavalla et saa lähintä pistettä.Kolmion keskipisteestä ei tosiaan tarvitse laskea etäisyyttä, tarkoitin että se vertailtava piste on se kohta, jossa kolmion keskipisteestä lähtevä viiva leikkaa kolmion sivun. Tuo piste on kolmion lähin kohta.
Sun pitää määritellä mikä on lähin kolmio. Onko se lähimmän pisteen mukaan, kolmion massakeskipisteen mukaan vai esim. kulmien keskimääräisen etäisyyden mukaan?Edelleen haetaan raa'asti lähintä kolmiota. Kumpi kolmion keskipiste on lähempänä sinistä pistettä? Ykköskolmion keskipiste voi olla lähmpänä, varsinkin jos tuo kakkoskolmion kärki karkaa todella kauas. Kuitenkin kakkoskolmio on sinistä pistettä lähempänä.
Ehkä joo näin toimii. Täytyy koittaa.Eikö tässä kakkosen lähin piste ole huomattavasti lähempänä kuin ykkösen jolloin muuta ei enää tarvita?
Ihan sama tuossa aiemmassa kuvassa siniselle pisteelle.
Minimietäisyys kolmion reunoihin nähden.Sun pitää määritellä mikä on lähin kolmio. Onko se lähimmän pisteen mukaan, kolmion massakeskipisteen mukaan vai esim. kulmien keskimääräisen etäisyyden mukaan?
Varmaan 2- osaisella päättelyllä kun kaikki yllä olevat ehdotukset yhdistetään:Minimietäisyys kolmion reunoihin nähden.
Kärkipisteen perusteella voi löytyä väärä.Varmaan 2- osaisella päättelyllä kun kaikki yllä olevat ehdotukset yhdistetään:
1. jonkin kolmion kärkipiste on lähempänä kuin mikään muu kärki -> valitaan ko kolmio
2. jos kahdella tai useammalla kolmiolla osuu kärki yhtä lähelle niin silloin tutkitaan näistä kolmioista muutkin kulma -> valitaan lähin.
jos edelleen sama tulos pitää valita jollakin perusteella (koordinaatistossa ylempänä/alempana/oikealla/vasemmalla, järjestyksessä ensimmäinen/viimeinen, jne) kumpi/mikä on lähin kolmio.
Sitten on tämä tilanne johon tuo yllä oleva ei ehkä sovellu jos halutaan kolmion X olevan lähin Y:n sijaan.
1. etsitään lähimmät kulmat,Kärkipisteen perusteella voi löytyä väärä.
Nope. ojisaman esimerkissä lähin olisi tuo pienempi ja kauempi kolmio.Lähin piste on joko kolmion kulma tai kolmion sivulla se kohta, josta on suora kulma pisteeseen. (eli suora kulma tulee kolmion sivun ja ja siitä pisteeseen ulottuvan suoran välille, jos on tullakseen)
Tuossa tapauksessa voidaan tarkistaa osuuko tuo minimietäisyys oikeasti johonkin kolmioon. Näpppituntumalta se kulma niistä kolmioista joihin tuo mätsää on se lähin, jos niitä sivuja on samalla suoralla.Mikä tuossa on ongelma? Kyllä tuon etäisyys suoralle -ratkaisun pitäisi toimia. Neliöjuuria ei tosiaan kannata laskea kuin vasta jos on ihan pakko.
Totta.Kärkipisteen perusteella voi löytyä väärä.
Jos haluat puhtaasti matemaattista ratkasua niin kantsii kysellä matikkathreadissa: Matikkatriidi - apuja matemaattisiin pulmiin Menee OT:n puolelle kun ei olekkaan ohjelmointikysymys mutta OP vissiin etsii tätä: Barysentrinen koordinaatti (geometria) – Wikipedia ja valmis ratkasu kolmessa ulottuvuudessa: Minimum distance between point and faceEi ole koulutehtävä, eikä itseasiassia ongelmana loopit yms. vaan puhdas matematiikka, että miten valitaan pisteelle lähin kolmio.
Nyt en ihan ymmärtänyt tuota ympyrän säde hommaan. Niinkö että pisteelle annetaan jokin säde, jotta saadaan selville kolmion sivu, jonka se lähimpänä leikkaa?
Nyt yritän etsiä lähintä kolmiota selvittämällä jokaisen kolmion sivun ja pisteen välisen suorakulmaisen etäisyyden ja valitsen kolmion jossa välimatka on lyhin. Tämä toimii n90% tapauksista...
En usko että nyt tarvitsee käyttää mitään ratkaisua kolmessa ulottuvuudessa, koska kyseessä on puhtaasti 2d pulma. Face on kolmiuloitteinen kappale, jossa esimerkiksi jokaisella nurkkapisteellä on eri Z arvo. Eikö tuo ratkaisu mahda antaa minimietäisyyden siihen faceen, sen Z etäisyyden.Jos haluat puhtaasti matemaattista ratkasua niin kantsii kysellä matikkathreadissa: Matikkatriidi - apuja matemaattisiin pulmiin Menee OT:n puolelle kun ei olekkaan ohjelmointikysymys mutta OP vissiin etsii tätä: Barysentrinen koordinaatti (geometria) – Wikipedia ja valmis ratkasu kolmessa ulottuvuudessa: Minimum distance between point and face
Ehkäpä @hissukka voinee avata mikä on kupletin juoni tässä?
Ei kovin ihmeellinenkään. Aika perus. Tuolla yllä se vastaus jo on ja @ade07 sen tuossa vielä graafisestikin esittää.Ei ollu ihan pieni kysymys ohjelmoinnista
Joskaan tuo esitys ei kerro miten se vertailu tapahtuu.Ei kovin ihmeellinenkään. Aika perus. Tuolla yllä se vastaus jo on ja @ade07 sen tuossa vielä graafisestikin esittää.
Kursin kasaan yksinkertaisen python esimerkin tuolla stackowerflown koodilla. Tuo dist() funktio oli tehty ottamaan huomioon nuo nurkat suoraan (tuo u rajoitus 0 ja 1 välille), joten niitä ei tarvitse erikseen tutkia.Joskaan tuo esitys ei kerro miten se vertailu tapahtuu.
Mutta kyllä joo, sen kolmiulotteisen laskennan erikoistapaukset osuu tähän.
# Mukailtu https://stackoverflow.com/a/2233538
def dist(p1, p2, p):
px = p2[0] - p1[0]
py = p2[1] - p1[1]
norm = px * px + py * py
u = ((p[0] - p1[0]) * px + (p[1] - p1[1]) * py) / norm
if u > 1:
u = 1
elif u < 0:
u = 0
x = p1[0] + u * px
y = p1[1] + u * py
dx = x - p[0]
dy = y - p[1]
return (dx * dx + dy * dy) ** 0.5
def kolmion_etäisyys(piste, kolmio):
return min(dist(kolmio[0], kolmio[1], piste),
dist(kolmio[1], kolmio[2], piste),
dist(kolmio[2], kolmio[0], piste))
kolmio = ((2,1), (6,2), (4,3))
piste1 = (2,3)
piste2 = (4,3.5)
print(kolmion_etäisyys(piste1, kolmio))
print(kolmion_etäisyys(piste2, kolmio))
$ python kolmio.py
1.4142135623730951
0.5
Joo, joukosta pitäis parsia Liiketoiminnan eperusteiden ammatilliset ja yhteisopinnot sekä niiden opintopistemäärät. Jotain noita HTLM-parsereita jo testailinkin pääsemällä niissä yhtään sen pitemmälle. Nyt ei kyllä kuuppa kestä enää tälle päivälle yhtään enempää, olen aamu ysistä asti nököttänyt tässä koneen äärellä tätä ihmetellen. Nyt lähden hakemaan kaupasta megapussin sipsiä vitutukseen.Mitä sinun siis pitäisi lukea? Parseroida? Kokeile vaikka näillä ohjeilla: Parse HTML in JavaScript.
Lisähauskuuttahan tuossa tuo vielä se, että suoraan HTML:n joukossa ei ole noita asioita mitä pitäisi sieltä kaivaa vaan ne taas tulee sivulle javascriptillä, joten pelkästään sivun HTML:n hakeminen ei vielä riitä. Tuollaisten sivujen parsiminen on muutenkin aika hanurista.Joo, joukosta pitäis parsia Liiketoiminnan eperusteiden ammatilliset ja yhteisopinnot sekä niiden opintopistemäärät. Jotain noita HTLM-parsereita jo testailinkin pääsemällä niissä yhtään sen pitemmälle. Nyt ei kyllä kuuppa kestä enää tälle päivälle yhtään enempää, olen aamu ysistä asti nököttänyt tässä koneen äärellä tätä ihmetellen. Nyt lähden hakemaan kaupasta megapussin sipsiä vitutukseen.
Tämä. Olisiko kuitenkin tarkoitus käyttää jotain APIa? HTML:n parsiminen tuolla tavalla on muutoinkin ihan viimeinen oljenkorsi ja hajoaa loputtoman helposti heti kun mitä tahansa muutetaan siellä sivulla. Saati jos se data ei edes tule suoraan HTML:ssä, vaan vaatii skriptin ajamista.Kiinnostaisi nähdä tarkka tehtävänanto. Kuulostaa vähän epätavalliselta koulutehtävältä, jos tuon urlin kautta pitäs saada parsituksi nuo mainitut.
Ei ole varsinainen "koulutehtävä", vaan kurssilla piti löytää kummiyritys tai vastaavaa jolle ryhmäprojektina voidaan toteuttaa kummiyrityksen toivoma aplikaatio tai websivu tai vastaavaa. Minun 3-hengen ryhmällä on tarkoitus tehdä mobiiliappi liiketoiminnan opiskelijoiden käyttöön, jolla opiskelija voi drag & drop laatikoita vetämällä koostaa oman henkilökohtaisen opetussuunnitelmansa ja esittää tämän vastuuopettajalleen. Näihin vedettäviin laatikoihin olisi tarkoitus eperusteista saada opinnot ja opintoisteiden määrä, ja kyseisiä laatikoita voi vetää lukukauden 5-jakson periodeihin (kesä on se viides) niin että jokaisella periodilla näkyy siihen koottujen opintojen opintopisteiden määrä.Samaa olin tulossa sanomaan, että ei noita tietoja tuolta sivulta palautuvasta HTML:stä ole parsittavissa.
Kiinnostaisi nähdä tarkka tehtävänanto. Kuulostaa vähän epätavalliselta koulutehtävältä, jos tuon urlin kautta pitäs saada parsituksi nuo mainitut.
Joo, APIa on tarkoitus käyttää. On vain koko React ja webhomma itselle vielä ihan uusi juttu, että en ole ihan perillä näistä. Kovaa touhua kun ensimmäinen lukuvuosi opetettiin Pythonia ja C#, joiden ylimääräiseen opiskeluun panostin myös omalla ajallani ihan hemmetisti. Sitten tokan lukuvuoden alussa heitetään tekemään "asiakkaalle" ohjelmaa rajapintaan Reactilla, joka pitäis siinä tekemisen ohessa samalla opetella. Olisivat voineet opettajat vaikka hyvissä ajoin vinkata että tämmöstä tulossa, mutta ei. Tässä painanut ohessa Moocin Fullstack Open-kurssia jossa käydään isommin Reactia, Mongo DB:tä ja muuta mukavaa.Tämä. Olisiko kuitenkin tarkoitus käyttää jotain APIa? HTML:n parsiminen tuolla tavalla on muutoinkin ihan viimeinen oljenkorsi ja hajoaa loputtoman helposti heti kun mitä tahansa muutetaan siellä sivulla. Saati jos se data ei edes tule suoraan HTML:ssä, vaan vaatii skriptin ajamista.
Juu, tiedän kyllä tuon tuskan. Aikanaan tartti yliopistolla yhdellä kurssilla opetella lennosta Python + Flask, HTML ja Javascript + JQuery ja koodaileen semmonen full stack web-sovellus aika nopsalla aikataululla, niin olihan se aika raskas paketti yhdellä kertaa. SQLite tais olla kantana. Toki kurssilla oletettiin, että tuo fronttipuoli (eli HTML ja Javascript) ois ollu jollain tasolla entuudestaan tuttua, mutta ei ollu aikaa käydä esitietokurssejaJoo, APIa on tarkoitus käyttää. On vain koko React ja webhomma itselle vielä ihan uusi juttu, että en ole ihan perillä näistä. Kovaa touhua kun ensimmäinen lukuvuosi opetettiin Pythonia ja C#, joiden ylimääräiseen opiskeluun panostin myös omalla ajallani ihan hemmetisti. Sitten tokan lukuvuoden alussa heitetään tekemään "asiakkaalle" ohjelmaa rajapintaan Reactilla, joka pitäis siinä tekemisen ohessa samalla opetella. Olisivat voineet opettajat vaikka hyvissä ajoin vinkata että tämmöstä tulossa, mutta ei. Tässä painanut ohessa Moocin Fullstack Open-kurssia jossa käydään isommin Reactia, Mongo DB:tä ja muuta mukavaa.