Ребята помогите превести код из 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; }
}
}
}
Здравствуйте, 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.)));
}
};
спасибо большое
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
]
Здравствуйте, 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);
Только это уже не код а какашечка.