webForumDet fria alternativet

Sin-kurva på x-axeln med BGI

C/C++ur C/C++

13 svar · 556 visningar · startad av PeW

Medlem sedan juni 200010 432 inlägg
Frågan#1

Några tips om hur plotta ut pixlar i en sinkurva på x-axeln, +/- 15px på y och ca 25 px mellan maxpunkterna. Helst ingen trög loop utan mera pang på röbetan... eftersom den är tänkt att hamna i en nästlad for-slinga från början. Det är DOS och Borlands BGI som gäller.. vers BC5.02.

Tack på förhand!

------------------
Ancilla, face mea laganum!

[Redigerat av PeW den 15 feb 2001]

Medlem sedan dec. 2000485 inlägg
#2

Mig veterligen måste du använda en loop.
Fast om du är smart kan du ju använda dig av symmetrin hos en sinuskurva och genom spegling och transformering minska antalet operationer.
På så sätt behöver du bara "räkna ut" 1/4. :p

Medlem sedan feb. 20002 300 inlägg
#3

En loop måste du använda för att rita ut kurvan.

Och jag är tveksam när det gäller speglingar och transformationer. Dessa funktioner är förmodligen mer krävande än en vanlig "rita-sinuskurva-funktion" och då tjänar du inget på det.

------------------
- Erik Hellström -
- Datalogiprogrammet - MDH -
- http://3d.burken.nu -

Medlem sedan dec. 2000485 inlägg
#4

PhOrPhEr: naturligvis är det mer krävande... att koda (inte svårt dock). Ur effektivitets synvinkel är det bra mycket snabbare än att rita ut hela sinuskurvan. Snabba funktioner gillar vi! :p

Medlem sedan juni 200010 432 inlägg
#5

OK.. lite förslag i kod?

------------------
Ancilla, face mea laganum!

Medlem sedan dec. 2000485 inlägg
#6

Har du börjat med koden själv eller står du på ruta 1?

lite pseudo-kod då jag inte vet hur dina ritfunktioner ser ut (plotPixel finns i GLUT - du får anv motsv).
plotPixel(x, y, r, g, b) - röd, grön, blå - anger färgen på pixeln.

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
for(x_position=0; i<=pi/2;intervallökning av x_position)
{
y_position = sin(x_position);
plotPixel(x_position, y_position, r, g, b);
plotPixel(pi-x_position, y_position, r, g, b);
plotPixel(-x_position, -y_position, r, g, b);
plotPixel(-pi+x_position, -y_position, r, g, b);
}

Detta bör skapa en sinuskurva y=sinx i intervallet -pi till pi (radianer används).
Varje varv plottar ut 4 punkter genom att utnyttja symmetrin. På detta sätt behöver du bara räkna ut y för 0 < x < pi/2, dvs en 4:e del av kurvan.
bra va :)

[Redigerat av D3VaST8D den 16 feb 2001]

Medlem sedan juni 200010 432 inlägg
#7

Nej jag står inte i ruta ett. Men jag behövde baka in en sinkurva i programmet. Körde en annan variant med nästlade forloopar som drog ned tempot rejält. Ska testa med koden här. :)

------------------
Ancilla, face mea laganum!

Medlem sedan dec. 2000485 inlägg
#8

OBS! koden förutsätter att du kan skapa ett koordinatsystem.... vill du enbart använda dig av pixelpositioner får du ange en referensepunkt. Utifrån denna får du räkna ut absolutbeloppet och addera/subtrahera istället för att köra med x, -x, y, -y.

Anledningen till att det går slött är att operationen kör med decimaltal. Det kräver mer av processorn. Ju färre decimaltalsoperationer du utför desto snabbare går det. Kan du komma på en algoritm som "ungefär" ger en sinuskurva men enbart använder sig av heltalsoperationer kan du speeda upp koden ytterligare! :p

[Redigerat av D3VaST8D den 17 feb 2001]

Medlem sedan juni 200010 432 inlägg
#9

D3VaST8D >>
Jorå, det börjar likna nåt... grejen är att hela programmet vart lite komplext med itererande funktioner m.m.., så jag ska sätta mig ikväll och snygga till koden lite och kolla igenom heltalsberäkningar kontra decimalt. Förmodligen kan jag styra upp det som du sa. Tack!

------------------
Ancilla, face mea laganum!

Medlem sedan dec. 2000485 inlägg
#10

Itererande funktioner??? Är det funktioner med loopar eller rekursiva funktioner (dvs funktioner som anropar sig själva)?

Medlem sedan juni 200010 432 inlägg
#11

Hallå där Pet-Johan? ;)

Nej, men funktioner som jag loopat... dvs anropar x-antal ggr istället för att nästla alltför många forsatser och upprepa kod.
Programmet skulle vara i c-syntax och med BGI så det blir som det blir... :)

------------------
Ancilla, face mea laganum!

[Redigerat av PeW den 17 feb 2001]

Medlem sedan dec. 2000485 inlägg
#12

haha :e
C rockar phett!
Beror på vad man vill åstadkomma, sitter själv och proggar ftp klient+server nu i C. :p

Medlem sedan juni 200010 432 inlägg
#13

Inge fel på C, egentligen. Men de färdiga funktionerna till Borlands BGI är en aningens tunggrodda... äh, det blir nog bra det här :)

------------------
Ancilla, face mea laganum!

Medlem sedan juni 200010 432 inlägg
#14

Nu tickar det på som det skulle :)
Tack för hjälpen!

------------------
Ancilla, face mea laganum!

291 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
134 ms — hämta forumlista (db)
149 ms — hämta statistik (db)
128 ms — hämta tråd, inlägg och bilagor (db)