Moi.
Olen pähkäillyt seuraavaa:
Tarvisi laskea pisteen suhdemitat referenssiviivaketjuun nähden.
Kuva kertoo enemmän kuin 1000 sanaa. Alla paintilla piirretty kuva.
Kuva
Lähtötiedosto on Landxml tiedosto, siinä on kyllä enemmän tietoa mitä kerroin tuossa kuvassa. Alla esimerkki tiedoista mitä on saatavilla:
<Line dir="102.872658" length="28.280872" staStart="0.000000"> <Start>6819025.630464 24470530.820029 0.000000</Start> <End>6819024.354762 24470559.072114 0.000000</End> </Line> <Curve rot="ccw" chord="30.612477" dirEnd="83.307240" dirStart="102.872658" length="30.733287" radius="100.000000" staStart="28.280872"> <Start>6819024.354762 24470559.072114 0.000000</Start> <Center>6819124.252972 24470563.582944 0.000000</Center> <End>6819027.671006 24470589.504437 0.000000</End> </Curve> <Line dir="83.307240" length="31.030743" staStart="59.014159"> <Start>6819027.671006 24470589.504437 0.000000</Start> <End>6819035.714638 24470619.474538 0.000000</End> </Line> <Curve rot="ccw" chord="25.936022" dirEnd="66.749223" dirStart="83.307240" length="26.009272" radius="100.000000" staStart="90.044902"> <Start>6819035.714638 24470619.474538 0.000000</Start> <Center>6819132.296604 24470593.553045 0.000000</Center> <End>6819045.629297 24470643.440697 0.000000</End> </Curve> <Line dir="66.749223" length="129.086011" staStart="116.054174"> <Start>6819045.629297 24470643.440697 0.000000</Start> <End>6819110.027276 24470755.316067 0.000000</End> </Line>
Miten tässä pitäisi lähteä liikkeelle? Ensimmäisenä selvittää minkä elementin lähellä piste on ja ruveta laskemaan offset ja station joko suorasta viivasta tai kaaresta.... Vinkkejä kaipailen.
Jos noita pisteitä, viivoja ja kaaria ei nyt ihan miljoonia ole, niin yksi vaihtoehto olisi ehkä laskea jokaisen pisteen ja viivan/kaaren välinen etäisyys ja sijaintiarvo ja valita kullekin pisteelle se, missä sijaintiarvo on olemassa ja etäisyys on lyhin.
Itseasiassa punainen piste vaihtaa sijaintiaan 5kertaa/sek
No ehkä sit voi olla että niitä ei sais ihan puolta miljoonaa olla.
Mites tällaiset erikoistapaukset (kuva ei ole mittatarkka)
Pisteen A etäisyys on n. 9, mutta onko oikea Station 12.5, 27.5 vai 42.5 ?
Pisteen B etäisyys on n. 6.5, mutta onko oikea Station 15, 20, 25 vai jotain muuta väliltä 15-25 ?
Vai onko tulkintani systeemistä ihan lähtökohtaisesti virheellisiä.
Ei ole tulkinta virheellistä, stationeita voi olla yhdellä pisteellä periaatteessa monta, valitaan yksinkertaisesti pienin.
Joo tässähän tämä yksi ongelma on myös. Jos piste on kaaren r:n verran sivussa, niin station paikkoja on kaksi. Tällöin yksinkertaisesti valitaan pienempi station.
Noita elementtejä ei kyllä yhdessä tiedostossa ole välttämättä kovin montaa, yleensä joitain kymmeniä.
No jos niitä on vain joitain kymmeniä ja vain 5 kertaa/s pitää laskea, niin tuohan onnistuu alunperin ehdottamallani tavalla vaikka kuusnepalla.
Edit: No ok, saattaa olla että trigonometriset funktiot ja liukuluvut olis kuitenkin liikaa :D
Toisaalta, jos sivumitta on enemmän, kuin kaaren säde, niin lasketaan station edelliseltä suoralta.
Grez kirjoitti:
No jos niitä on vain joitain kymmeniä ja vain 5 kertaa/s pitää laskea, niin tuohan onnistuu alunperin ehdottamallani tavalla (melkein?) vaikka kuusnepalla.
Joo niin taitaa pystyä. Täytyy koittaa googlettaa algrotimit noihin.
Periaatteessa tiedostossa voi olla elementtinä myös klotoidi, eli tiukkeneva kaari. Tälle tapaukselle varmaan myös jostain löytyy valmis kaava.
Tarvisin apua tuohon kaaren algoritmiin. Lasken pisteen etäisyyden kaaresta säteen ja kaaren keskipisteen avulla (pythagoraan lause)..
Mutta mitähän matematiikkaa pitäisi käyttää, jotta ei laskettaisi kokonaiselta ympyrältä vaan vain kaarelta?
Linkin kuvassa tämähetkinen tilanne, eli punaiset pisteet verrataan katkoviivaan vaikka pitäsi verrata suoraan viivaan.
Edit:
Olisiko niin, että mikäli kaaren alkupisteen ja kaaren loppupisteen välinen jana ei leikkaa annetun pisteen ja keskipisteen välistä janaaaa, niin piste ei ole kaarella? Onko muita ehdotuksia?
juffe kirjoitti:
Olisiko niin, että mikäli kaaren alkupisteen ja kaaren loppupisteen välinen suora ei leikkaa annetun pisteen ja keskipisteen välistä suoraa, niin piste ei ole kaarella? Onko muita ehdotuksia?
Ole huolellinen sanoissa. Suora on päättymätön, puolisuora päättyy yhdestä päästä ja jana päättyy kahdesta päästä. Kaksi suoraa (tasossa) leikkaavat, jos eivät ole samansuuntaiset.
Ehdottamasi janojen leikkaus ei tuo oikeaa tulosta. Voit todeta tämän helposti vaikka 60 asteen ja 300 asteen kaarilla tutkimalla pistettä, joka on tasan kaaren päiden välissä tai tästä ihan vähän ympyrän keskustaan tai pois päin.
Trigonometriaa kannattaa opetella. Atan2-funktiolla saa pisteen kulman suhteessa ympyrän keskustaan. Kulmista voi suoraan todeta, onko piste tutkittavan kaaren suunnalla. Jos on, sopii sama etäisyyden kaava kuin koko ympyrälle. Muuten kaaren lähin piste on jompikumpi päätepisteistä.
Metabolix kirjoitti:
(06.02.2022 21:54:38): ”– –” Ole huolellinen sanoissa. Suora on päättymätön...
Kiitos. Tässä koitetaan opetella ohjelmointia ja samalla matikkaa. Koulussa ei ole matematiikkaa ikinä oikein oppinut kunnolla, koska asioiota ei ikinä sovellettu käytäntöön. Mulle ei ne jäänyt päähän.
Aihe on jo aika vanha, joten et voi enää vastata siihen.