2013-07-01 2 views
-1

я все,Плавающие значения изменения

Я заинтересован в изучении компьютерной графики алгоритмов и я делаю забавную упражнения здесь:

http://groups.csail.mit.edu/graphics/classes/6.837/F03/assignments/assignment0/index.html

Однако, у меня возникли проблемы с получением мой Класс IFS должен принимать значения с плавающей запятой правильно. Вот интерфейс:

#ifndef _IFS_H_ 
#define _IFS_H_ 
#include "matrix.hpp" 
#include "Image.hpp" 

class IFS 
{ 
public: 
    IFS(const char* filename); 
    ~IFS(); 

    void render(Image& img, int numPoint, int numIterations); 
    void printOut(); 

private: 
    int num_transforms;   // number of transformations 
    Matrix* matrices; 
    float* probablility; 

}; 

#endif 

Вот реализация:

#include "IFS.h" 
#include <iostream> 

IFS::IFS(const char* filename){ 
    FILE* input = fopen(filename,"r"); 
    assert(input != NULL); 

    fscanf(input,"%d",&num_transforms); 

    matrices = new Matrix[num_transforms-1];  
    probablility = new float[num_transforms-1]; 

    float temp; 
    for (int i = 0; i < num_transforms; i++) { 
     fscanf (input,"%f",&temp); 
     std::cout << temp << std::endl; 
     probablility[i] = temp; 
     std::cout << probablility[i] << std::endl; 
     matrices[i].Read3x3(input); 
    } 

    fclose(input); 
} 

IFS::~IFS(){ 
    delete matrices; 
    delete probablility; 
} 

void IFS::printOut(){ 
    std::cout << "Number of transformsations: " << num_transforms << std::endl; 
    std::cout << probablility[0] << std::endl; 

    for(int i = 0; i < num_transforms; i++){ 
     std::cout << "Number of iterations: " << i << std::endl; 
     std::cout << probablility[i] << std::endl; 
     matrices[i].Write3x3(); 
    } 
} 

void IFS::render(Image& img, int numPoint, int numIterations){ 
    std::cout << "In Progress" << std::endl; 
} 

Вот моя главная функция:

#include <cstdio> 
#include <cstdlib> 
#include <iostream> 

#define HEIGHT 480 
#define WIDTH 640 

#include "image.hpp" 
#include "matrix.hpp" 
#include "vectors.hpp" 
#include "utils.h" 
#include "IFS.h" 


int main(void){ 
    IFS myIFS("dragon.txt"); 
    myIFS.printOut(); 

    std::cout << "Hello world" << std::endl; 
    getchar(); 
    return 0; 
} 

Вот dragon.txt:

2 
0.5 
0.500124 0.499725 -0.250062 
-0.499725 0.500124 0.249863 
0.000000 0.000000 1.000000 
0.5 
-0.499327 0.500521 0.749664 
-0.500521 -0.499327 0.750261 
0.000000 0.000000 1.000000 

И вот вывод:

myImage

Я не изменил любой код стартера с сайта. Я не могу понять проблему. Кажется, что конструктор принимает значения . Значения изменяются оттуда до метода IFS :: printOut() . Кто-нибудь знает, что происходит?

+0

Не используйте ТАВ. И, пожалуйста, отформатируйте и упростите код, который вы публикуете: Оставьте «# ifndef' &' # define' '_IFS_H_', удалите ненужные пустые строки ... Затем опишите вашу проблему более подробно, потому что мне непонятно, что вы имеете в виду (и не ожидайте, что другие проанализируют ваш код, ищущий смысл). –

+1

-1 для прикрепления скриншота ** текста **. –

+1

Этот вопрос не показывает достаточного усилия, чтобы сузить проблему и быть кратким. –

ответ

2

Вы не выделяете достаточно места в этих массивах.

matrices = new Matrix[num_transforms-1];  
probablility = new float[num_transforms-1]; 

Вы выделили место для num_transforms-1 элементов, но тогда у вас есть этот код:

for (int i = 0; i < num_transforms; i++) { 
    fscanf (input,"%f",&temp); 
    std::cout << temp << std::endl; 
    probablility[i] = temp; 
    std::cout << probablility[i] << std::endl; 
    matrices[i].Read3x3(input); 
} 

где вы инициализация num_transforms, так что вы собираетесь быть накатом выделенного пространства.

Смежные вопросы