помогите превести код из C# в C++ как положено
От: RIVATNT  
Дата: 20.06.11 18:35
Оценка: -1
Ребята помогите превести код из C# в C++ как положено, в последнем нифига не шарю...

using System;
using System.Collections.Generic;
using System.Text;


namespace SoftStencils
{
    class GaussianDistribution
    {
        double standardDeviation;

        public GaussianDistribution(double standardDeviation)
        {
            this.standardDeviation = standardDeviation;
        }

        public float[] TapArray(int numberOfTaps)
        {
            numberOfTaps = (numberOfTaps - 1) / 2 + 1;
            float[] weights = new float[numberOfTaps];

            double[] tempWeights = new double[numberOfTaps];
            double sum = 0;
            for (int i = 0; i < numberOfTaps; i++)
            {
                tempWeights[i] = Gaussian1D(i);
                sum += tempWeights[i] * 2;
            }
            sum -= tempWeights[0];

            double augmentationFactor = 1 / sum;

            for (int i = 0; i < numberOfTaps; i++)
                weights[i] = (float)(tempWeights[i] * augmentationFactor);

            return weights;
        }

        private double Gaussian1D(int distance)
        {
            return
                1 / (Math.Sqrt(2 * Math.PI) * standardDeviation)
                    *
                Math.Exp(
                    -Math.Pow(distance, 2) / (2 * Math.Pow(standardDeviation, 2))
                );
        }

        public double StandardDeviation
        {
            get { return standardDeviation; }
            set { standardDeviation = value; }
        }
    }
}
Re: помогите превести код из C# в C++ как положено
От: 24  
Дата: 20.06.11 18:57
Оценка: 3 (1)
Здравствуйте, RIVATNT, Вы писали:

RIV>Ребята помогите превести код из C# в C++ как положено, в последнем нифига не шарю...


Рискую показаться занудой, но как ты будешь этот код использовать? Это я к тому, что на С++ это переводится практически один в один, вопрос только в том, какой способ управления памятью выбрать для массива. И у того, кто сможет этот результат применить, не должно быть никаких проблем с переписыванием на С++, а для остальных результат перевода бесполезен.
Re: помогите превести код из C# в C++ как положено
От: wander  
Дата: 20.06.11 19:13
Оценка: 3 (1)
Здравствуйте, RIVATNT, Вы писали:

RIV>Ребята помогите превести код из C# в C++ как положено, в последнем нифига не шарю...


RIV>
...


Возможно медвежью услугу оказываю... Ну да ладно Код практически один в один. Весь контроль значений, проверки и т.п. на твоей совести.
#include <vector>
#include <cmath>

class GaussianDistribution
{
public:
    explicit GaussianDistribution(double standardDeviation)
        : standardDeviation_(standardDeviation)
    {}
    void TapArray(std::vector<float> & weights, int numberOfTaps) const
    {
        numberOfTaps = (numberOfTaps - 1) / 2 + 1;

        std::vector<double> tempWeights(numberOfTaps);

        double sum = 0;
        for(int i = 0; i < numberOfTaps; ++i)
        {
            tempWeights[i] = Gaussian1D(i);
            sum += tempWeights[i] * 2;
        }
        sum -= tempWeights[0];

        double augmentationFactor = 1.0 / sum;

        weights.resize(numberOfTaps);
        for(int i = 0; i < numberOfTaps; ++i)
        {
            weights[i] = float(tempWeights[i] * augmentationFactor);
        }
    }

    double getStandardDeviation() const
    {
        return standardDeviation_;
    }
    void setStandardDeviation(double value)
    {
        standardDeviation_ = value;
    }
private:
    double standardDeviation_;

    double Gaussian1D(int distance) const
    {
        return 1. / (sqrt(2 * M_PI) * standardDeviation_) * exp(pow(distance, 2.) / (2 * pow(standardDeviation_, 2.)));
    }
};
Re[2]: помогите превести код из C# в C++ как положено
От: RIVATNT  
Дата: 20.06.11 20:00
Оценка:
спасибо большое
    GaussianDistribution *Distribution = new GaussianDistribution(GaussianStandardDeviation);
    float Taps[5]; 
    Distribution->TapArray(Taps,5);


блин должно работать так.... но не работет....

.\shaders.cpp(83) : error C2664: GaussianDistribution::TapArray: невозможно преобразовать параметр 1 из 'float [5]' в 'std::vector<_Ty> &'
with
[
_Ty=float
]
Re[3]: помогите превести код из C# в C++ как положено
От: nen777w  
Дата: 20.06.11 20:16
Оценка:
Здравствуйте, RIVATNT, Вы писали:

RIV>спасибо большое

RIV>
RIV>    GaussianDistribution *Distribution = new GaussianDistribution(GaussianStandardDeviation);
RIV>    float Taps[5]; 
RIV>    Distribution->TapArray(Taps,5);
RIV>


RIV>блин должно работать так.... но не работет....


RIV>.\shaders.cpp(83) : error C2664: GaussianDistribution::TapArray: невозможно преобразовать параметр 1 из 'float [5]' в 'std::vector<_Ty> &'

RIV> with
RIV> [
RIV> _Ty=float
RIV> ]


GaussianDistribution *Distribution = new GaussianDistribution(GaussianStandardDeviation);
float Taps[5]; 
std::vector<float> v;
v.assign(Taps, Taps+sizeof(Taps)/sizeof(float));
Distribution->TapArray(v,5);


или даже наверно так:

GaussianDistribution *Distribution = new GaussianDistribution(GaussianStandardDeviation);
std::vector<float> v;
v.assign(5, 0);
Distribution->TapArray(v,5);


Только это уже не код а какашечка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.