Sida 1 av 2
Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 15 augusti 2011, 22:22:01
av ToPNoTCH
Knepig rubrik men jag hoppas jag kan beskriva mitt problem på ett förståligt sätt.
Jag fipplar med en OSD lösning och den genererar sin overlay i form av färdiga tecken.
Tecknen är definerade av 12X18 bildpunkter.
För att representera en virtuell horizont (styrs av en accelerometer) så har jag skapat 18 tecken med en(1) vit bilpunkt från rad 1 till rad 18.
Området som visar denna horizont är 17X17 tecken (alltså 204X 204 punkter).
Självfallet är mitten tecknet (tecknet på position kolumn 9,rad 9) en fast och centrerad punkt.
Nu vill jag hitta en formel för att lista ut vilket tecken som skall sitta på vilken rad för respektive kolumn, för att representera en linje där centrum tecknet utgör origo.
För att ge ett enkelt exempel så skulle en 45 gradig linje se ut så här:
kolumn 1,rad 1, tecken 9
kolumn 2,rad 2, tecken 9
kolumn 3,rad 3, tecken 9
kolumn 4,rad 4, tecken 9
osv....
En horizontal linje skulle bli:
kolumn 1,rad 9, tecken 9
kolumn 2,rad 9, tecken 9
kolumn 3,rad 9, tecken 9
kolumn 4,rad 9, tecken 9
osv....
När man börjar använda vinklar däremellan så kommer ju de andra tecknen in i matchen och det är här jag inte får till det.
Observera att när jag skriver streck så menar jag egentligen en rad med punkter, dom är ju inte sammanhängande givet hur jag tidigare beskrev att de definerats.
Det borde gå att lösa med en enklare formel tycker jag.
Någon som har någon ide ?
p.s
Det är svårt att beskriva problemet så ställ gärna kompletteringsfrågor.
d.s
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 15 augusti 2011, 22:24:05
av sodjan
Några bilder som visar det du försöker beskriva vore
nog väldigt värdefulla.
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 15 augusti 2011, 23:52:21
av labmaster
Inte helt lätt att hänga med i din beskrivning så här dax på dygnet men gör ändå ett försök. Den del av horisontliinjen som startar vid ett givet X-värde är 12 pixlar i X-led stämmer det? Du kan alltså öka eller minska Y vart 12:te X där du skall välja ett tecken med avseende på Y. Den matematiska utmaningen är i så fall inte speciellt kompicerad. Jag antar att du känner till räta linjens ekvation som är Y = kX + M.
Använder du räta linjens ekvation kan du räkna ut vilket tecken du skall välja genom att använda var 12:te sampel av X. k är linjens lutningskoeficient.
Om horisonten lutar så att vänster kant är lägre än den högra när du tittar med näsan mot horisonten är k > 0. Om horisonten lutar åt höger, med den vänstra kanten högre än den högra kanten så är k < 0. Är vänster och höger kant på samma höjd så är k = 0.
Förutsättningen är förstås att du betraktar horisonten som en rät linje.
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 08:41:37
av Andax
Om k är kolumn, r är rad, t tecken, och fi vinkeln från horisonten (dvs 0 horisontellt, pi/2 vertikalt) borde det bli något i stil med:
r = floor(tan(fi)*(k-9))+9
t = floor(tan(fi)*(k-9)-floor(tan(fi)*(k-9)))*9 + 9
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 09:36:33
av Gimbal
Upplösningen är alltså 204 i höjdled och 17 i sidled?
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 12:50:41
av ToPNoTCH
@Labmaster
Jag tror du har fattat rätt, givet beskrivningen i ditt första stycke.
Skall försöka översätta din beskrivning i en formel.
@Andax
Jag försökte testköra dina formler i Excel, men jag fattar inte vad "floor" representerar.
Är det klassisk "avrundning nedåt" som avses ?
@Gimbal
Nej det blir 204 punkter (eller 17 tecken) åt varje håll.
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 13:01:14
av ToPNoTCH
Nu svammlade jag till det så klart.
Eftersom ett tecken är 12X18 punkter så är det inte lika många tecken på höjden som på bredden.
Det skall vara 17 tecken brett och 11 tecken högt, vilket motsvarar 204x198 bildpunkter.
Sorry för förvirringen.
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 13:10:28
av Gimbal
Men hade du inte 18 olika sådana här "_" tecken, där strecket är på olika höjd?
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 13:53:34
av ToPNoTCH
Nja. Det är inte ett streck utan en punkt, men annars rätt
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 14:00:57
av Gimbal
ok, men då har du väl inte mer än 17 olika positioner i sidled i alla fall?
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 14:01:26
av ToPNoTCH
Är det inte så enkelt som att jag har en liksidig triangel där vinkel och ena kateten(x) är känd.
Om jag då beräknar den okända kateten(y) så är det väl bara att dela det värdet med 18 för att få ut tecken position i höjdled och sedan använda modularen för att få ut vilket tecken som skall skrivas.
Sedan öka den kända kateten(x) med 12 och repetera.
Och vad var nu formeln för att beräkna en okänd katet om man har en känd vinkel och en känd katet ??
Puh trigonometri

Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 14:03:41
av ToPNoTCH
Gimbal skrev:ok, men då har du väl inte mer än 17 olika positioner i sidled i alla fall?
Nää.. Helt rätt..
Dessuom är ju position 16 fast.
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 14:08:51
av ToPNoTCH
Lutar åt att Sodjan hade en poäng.
Så här representeras alltså 0 grader.
osd.png
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 14:21:45
av Gimbal
Jag skulle börja med att göra en plot(x,y) funktion. dvs så att du enkelt kan sätta en punkt var som helst på skärmen.
Re: Problem med teckenbaserade linjer (Matematisk utmaning)
Postat: 16 augusti 2011, 14:26:56
av sodjan
OK.
Så i varje "tecken-box" så är det enbart *1* punkt som ska aktiveras ?
Inte en hel rad (så som det lät från början).
Och punkten sitter alltid i mitten i tecken-boxen, sett ur ett vänster/höger perspektiv ?
Men på olika höjd i mitten ?
Om nu boxen är 11 punkter hög, så blir det väl bara 11 olika "tecken" ?
> Så här representeras alltså 0 grader.
Just *0* grader var väl kanske det sämsta du kunde välja för ett exempel...

Hur ska t.ex 30 grader se ut ?? Ska vinkeln ta hänsyn till att det är olika
proportioner på boxen ? D.v.s att 45 grader ska inte bara vara en rak trappa
snett uppåt ? Det ger ju mindre än 45 grader efter de är bredare än höga (även
om det inte ser ut så på din bild !?).