Потому что 0 является центром сигмовидной кривой.Ваш x
начинается с 0;если вы хотите, чтобы ваша кривая строилась симметрично, вам необходимо вычислить симметричный аргумент, равный 0:
for(int x=0; x<bih.biWidth; x++)
{
double a= x - 0.5*bih.biWidth;
SetPixel(hdc, bih.biWidth-x, 1.0/(1.0+exp(-a)) * bih.biHeight, red);
}
Масштабирование a
с помощью постоянного коэффициента будет регулировать наклон сигмовидной функции.
(Я также подозреваю, что ваш исходный код переключил коэффициенты масштабирования, используемые в аргументах SetPixel (), поэтому я исправил это. Нет смысла вычитать x
из bih.biHeight
, когда он варьируется отОт 0 до bih.biWidth
вместо ...)
[дополнительное редактирование: я дополнительно переключил аргументы, чтобы biWidth
и biHeight
находились в x- и y-координатах соответственно.В любом случае, это обычный способ построения функций - поэтому, если вы хотите перевернуть график, вам нужно будет переключить его обратно]