Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++]programma per interpolazione

    salve a tutti io devo fare un programma che consiste nella lettura di un tot di dati (3 valori per le posizioni e 3 per le velocità) da un file, quindi devo fare una restrizione di array per selezionarne solo alcuni (es 20 punti) e infine fare lo spline di sti punti con grafico, il mio programma per ora legge i dati e fa il grafico di tutti i punti delle x (nel file sono messi in ordine così: pos(x,y,z) vel(x,y,z), a coppie di 6 insomma, e per la grafica uso una particolare libreria (passe_par_tout.h)) quindi cerca di fare lo spline ma qualcosa nn funzia,

    #include <iostream>
    #include <fstream>
    #include <passe_par_tout.h>
    #define OFF 6
    using namespace std;
    int main (int narg,char**args,char**env)
    {unsigned int
    l;
    double*posizione[3],*velocita[3],*dati;
    ifstream ascii("ascii"),binario("/home/mancio/binario");
    if(!ascii || !binario) {
    perror("Errore");}

    binario.seekg(0,ios::end),
    l=binario.tellg();
    l/= sizeof(double), l--;
    double d;
    binario.seekg(0,ios::beg),
    binario.read(reinterpret_cast<char*>(&d),sizeof(do uble)),

    cout <<"primo dato letto:" << d << '\n';
    binario.seekg(sizeof(double),ios::beg),
    cout <<"ho " << l << " dati\n";
    dati=new double[l];

    binario.read(reinterpret_cast<char*>(dati),l*sizeo f(double));


    posizione[0]= dati,
    posizione[1]= dati+1,
    posizione[2]= dati+2,

    velocita[0]= dati+3,
    velocita[1]= dati+4,
    velocita[2]= dati+5;




    int i; /*
    int T=20;
    int j=0;
    int K=20;
    int passo=(l/OFF)/K;
    double *pencapollax = new double [K+1];
    for (i=0;i<(l/OFF);i++)
    {if(i % passo==0)
    {(pencapollax[j++]=dati[i]);}}

    double *pencapollav = new double [K+1];
    for (i=0;i<(l/OFF);i++)
    {if(i % passo==0)
    {(pencapollav[j++]=dati[i+3]);}}



    double **coef ;
    coef = new double * [K];
    for(j=0; j < K; j++) coef[j] = new double[4];
    //primo polinomio:
    coef[0][0]= pencapollax[0];
    coef[0][1]= pencapollav[0];
    coef[0][2]= (-2*pencapollav[0])/(T/K) -(pencapollav[1]/(T/K)) +(3*pencapollax[1]/((T/K)*(T/K))) - (3*pencapollax[0]/((T/K)*(T/K)));
    coef[0][3]= (pencapollav[0]*(T/K)+2*pencapollax[0]-2*pencapollax[1]+pencapollav[1]*(T/K))/((T/K)*(T/K)*(T/K));

    //coeff successivi:


    for(i=0;i<(K-1);i++){
    double Qa=coef[i][0]+coef[i][1]*(T/K)+coef[i][2]*((T/K)*(T/K))+coef[i][3]*((T/K)*(T/K)*(T/K));
    double Qb=coef[i][1]+2*coef[i][2]*(T/K)+3*coef[i][3]*((T/K)*(T/K));
    double Qc=pencapollax[i+1];
    double Qd=2*coef[i][2]+6*coef[i][3]*(T/K);

    coef[i+1][3]=(((T/K)*Qb+Qa-Qc+(0.5)*(T/K)*Qd))/(3*((T/K)*(T/K))-(4*T*T*T)/(K*K*K));
    coef[i+1][2]= -(((T/K)*Qb+Qa-Qc+(4*((T*T*T)/(K*K*K))*coef[i+1][3])/(T/K)));
    coef[i+1][1]= Qb-(2*(T/K)*coef[i+1][2])-3*((T/K)*(T/K))*coef[i+1][3];
    coef[i+1][0]= Qa-((T/K)*coef[i+1][1])-((T/K)*(T/K))*coef[i+1][2]-(((T/K)*(T/K)*(T/K))*coef[i+1][3]);}

    for(i=0;i<(K-1);i++)
    {cout << coef[i][0]<<" "<<coef[i][1]<<" "<<coef[i][2]<<" "<<coef[i][3]<<endl;}
    */
    //rappresentazione grafica,andamento della coordinata X
    int L, A;
    double X[]= {0,0,1,1};
    m_startg(" ",&(L=600),&(A=600)),
    m_window(&(L=0),&(A=0));
    l = l/6;
    for(i=0;i<l;i++)
    {if (posizione[0][i*OFF] < X[1]) X[1]= posizione[0][i*OFF];
    if (posizione[0][i*OFF] > X[3]) X[3]= posizione[0][i*OFF];
    };

    X[2]= X[1]- 0.05*(X[3]-X[1]),
    X[3] += 0.05*(X[3]-X[1]),
    X[1]=X[2],
    X[0]=0, X[2]=l;
    m_frame(X,X+1,X+2,X+3);
    X[0]=0, X[1]= posizione[0][i*OFF],
    m_move(X);
    for(i=0;i<l;i+=1000)
    X[0]=i, X[1]=posizione[0][i*OFF],
    m_line(X);
    m_wait_for_events(&(L=999));

    };

    l'errore è nella parte commentata ma nn lo trovo! credo che sia nel modo in cui ho messo i punti negli array, spero qualcuno mi possa aiutare, grazie per l'attenzione

  2. #2
    Usa i tag code o php come da regolamento perché così non si capisce GNENTE..
    Dato che ci sei semplifica un po' le operazioni algebriche..
    ;-)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ma tra l'altro con che tipo di spline stai cercando di interpolare?

    Comunque concordo con MacApp, il codice così è illeggibile... tra l'altro anche il regolamento prevede di postarlo tra tag code o php
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.