Oprettet ons. d. 14. november 2001 kl. 14:07:04

langbein
langbein (51.267 point. Point ude: 120)

Grafisk funksjonskurve

Har en gammel tekstbasert c++ kompilator. Har tenkt å lage noen matematiske modeller der jeg behøver utskrift av en enkel grafisk kurve. Det vil kunne være godt nok å foreksempel få satt bokstaven \"x\" i rette posisjoner. Kan dette la seg gjøre ??

Skrevet ons. d. 14. november 2001 kl. 21:18:47| #1

ttn.bonk
ttn.bonk (20.700 point)
Ja, lav noget i stil med nedenstånde:

antag at dit vindue (DOS vindue?) er 80 tegn bredt og 24 tegn højt som på gamle tty-terminaler.
Såfremt du skriver ud på papir kan du jo bare ændre dimensionerne tilsvarende.

Så skal du skalere din funktion til at tage input i området 0-79, samt levere output i området 0-23.

Dette gøres ved en lineær transformation i x-aksen på simpel vis af det oprindelige interval [a,b]. I y-aksen er det igen en lineær transformation fra [f-min,f-max], hvor
f-min: den mindste værdi din funktion antager
f-mamx: den største værdi din funktion antager.

Lav et 2-dimensionelt array af tegn,
char output[24][80];

initialiser alle tegn til blank \' \' i output;

for (x=0; x<24; x++)
{
  output[x][f(x)] = \'x\';
};

for (i=0; i<24; i++)
{
  for (j=0; j<80; j++) cout<<output[i][j];
  cout << endl;
}


Skrevet tor. d. 15. november 2001 kl. 12:42:57| #2

langbein
langbein (51.267 point)
Meget smart løsning ! Takker så mye !

Skrevet fre. d. 16. november 2001 kl. 19:27:49| #3

problemer
problemer (19.505 point)
Hvilken kurve skulle det så beskrive?
For det som jeg får ud af det ligner ikke noget andet end underlige tegn...

x og f(x) ligger jo som nøgler i arrayet, men skulle de ikke ligge som værdierne i stedet for?
Ikke fordi at jeg er ekspert på området men jeg ville da tro at det er derfor jeg selv får så mærkeligt et resultat ud af det...

Skrevet søn. d. 18. november 2001 kl. 12:50:31| #4

ttn.bonk
ttn.bonk (20.700 point)
Nu beskrev jeg kun princippet, og overlod detaljerne i implementationen til langbein,
men prøv at oversætte og køre flg. program fra en DOS-prompt i fuld-skærm:

// Ønsker at tegne funktionen f(x)=sin(x) i intervallet [-pi,+pi]
// på simpel tekstuel vis på en tty-skærm med 71x21 tegn
#include \"stdafx.h\"
#include \"ostream.h\"
#include \"math.h\"

double f(double x)
{
  return sin(x);
}

int main(int argc, char* argv[])
{
  int i,j;
  double a = -3.14, b = 3.14;
  double min = f(a), max = f(a);
  double h = (b-a)/70;
  char output[70+1][20+1];

  // Beregn maximal og minimal værdi af funktionen f (til skalering i y-aksen)
  for (i=0; i<=70; i++)
  {
    double x = a + i*h;
    double y = f(x);
    if (y<min) min = y;
    if (y>max) max = y;
  }

  // Lav \"tom\" output
  for (i=0; i<=70; i++)
  {
    for (j=0; j<=20; j++)
    {
      output[i][j] = \' \';
    }
  }

  // \"Tegn\" funktionen f i output
  for (i=0; i<=70; i++)
  {
    double x = a + i*h;
    double y = f(x);
    j = (int) ((20*(y-min)/(max-min)) + 0.5); // Skalering i y-aksen; 0.5 er for korrekt afrunding
    output[i][j] = \'x\';
  }

  // Skriv output ud på skærmen
  // Bemærk: Omvendt udskrivning i y-aksen pga. skærm-koordinater
  // starter i øverste venstre hjørne og ikke i nederste venstre hjørne
  for (j=20; j>=0; j--)
  {
    for (i=0; i<=70; i++)
    {
      cout << output[i][j];
    }
    cout << endl;
  }
    return 0;
}

Skrevet søn. d. 18. november 2001 kl. 16:15:41| #5

problemer
problemer (19.505 point)
Tak for det fine eksempel:)
Jeg kunne ikke selv få det til at virke(dit eksempel virker fint):(

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Updater Hybrid App

Oprettet den 18. april 2012 kl. 13.29
sir_madsen giver 100 point for svar | Giv et svar »

Ansi-c win32API - kan ikke oprette Richedit4.1 kontrol

Oprettet den 16. april 2012 kl. 22.13
cblcbl giver 60 point for svar | Giv et svar »

Iphone Objective C - Sætte image på et imageview.

Oprettet den 7. april 2012 kl. 11.36
lasserasch giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger