// qoe1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<math.h>
#include<iostream>
#include <iomanip>
#include<fstream>
#include <GL/glut.h>
using namespace std;
double total[140][80];
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT); glPointSize(1.0f); glBegin(GL_POINTS);
int i, j, k, l;
float m, z,y;
for (i = 139; i >= 0; i--)
for (j = 0; j <= 78; j++)
for (k = 0; k <= 3; k++)
for (l = 0; l <= 3; l++)
{
m = total[i][j]/3.2;
glColor3f(m,m, m);
z = float((i*4+k - 280)) / 280;
y = float(j * 4 + l - 156) / 156;
glVertex2f(y, z);
}
glEnd();
glFlush();
glVertex2f(0.0f, 0.0f); glVertex2f(-0.5f, 0.5f); glEnd(); glFlush();
}
int main()
{
ofstream f("qoe.csv");
int i, j, k, l, m, z;
double a1, a2, times, a3;
double a[5][140][80];
double al[5][140][80];
double dl[5][140][80];
double d[5][140][80];
double dr[5][140][80];
double ar[5][140][80];
double az[5][140][80];
double dz[5][140][80];
double de[140][80];
double ae[140][80];
double b[5];
double n;
b[0] = 4;
b[1] = 4.3;
b[2] = 4.5;
b[3] = 4.7;
b[4] = 5.5;
for (m = 0; m <= 4; m++)
{
n = b[m];
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78; j++)
{
a1 = double(i) / 160 * n*3.3333;
a2 = double(j) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if (a3 < 49)
{
times = (9.0 + a3 - 16) / (6 * sqrt(a3));
a[m][i][j] = 1.0 - times;
}
else
{
if (i == 0)
for (k = j; k > 0; k--)
{
a1 = double(k) / 160 * n*3.3333;
a3 = a1*a1;
if (a3 <= 49)
{
a[m][i][j] = 2 + (double(j - k)) / 160 * n*3.3333/5;
break;
}
}
else
{
a1 = double(i - 1) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if ((a3 <= 49))
{
a[m][i][j] = a[m][i - 1][j] + 2 + double(1) / 160 * n*3.3333/5;
}
else
a[m][i][j] = a[m][i - 1][j] + double(1) / 160 * n*3.3333/5;
}
}
}
a[m][0][0] = 2;
}
for (m = 0; m <= 4; m++)
{
n = b[m];
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78; j++)
{
a1 = double(i) / 160 * n*3.3333;
a2 = double(j) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if (a3 < 31.36)
{
times = (5.76 + a3 - 10.24) / (4.8 * sqrt(a3));
d[m][i][j] = 1.0 - times;
}
else
{
if (i == 0)
for (k = j; k > 0; k--)
{
a1 = double(k) / 160 * n*3.3333;
a3 = a1*a1;
if (a3 <= 31.36)
{
d[m][i][j] = 2 + (double(j - k)) / 160 * n*3.3333/5;
break;
}
}
else
{
a1 = double(i - 1) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if ((a3 <= 31.36))
{
d[m][i][j] = d[m][i - 1][j] + 2 + double(1) / 160 * n*3.3333/5;
}
else
d[m][i][j] = d[m][i - 1][j] + double(1) / 160 * n*3.3333/5;
}
}
}
d[m][0][0] = 2;
}
for (m = 0; m <= 4; m++)
{
n = b[m];
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78; j++)
{
a1 = double(i) / 160 * n*3.3333;
a2 = double(j) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if (a3 < 49)
{
times = (9.0 + a3 - 16) / (6 * sqrt(a3));
al[m][i][78 - j] = 1.0 - times;
}
else
{
if (i == 0)
for (k = j; k > 0; k--)
{
a1 = double(k) / 160 * n*3.3333;
a3 = a1*a1;
if (a3 <= 49)
{
al[m][i][78 - j] = 2 + (double(j - k)) / 160 * n*3.3333/5;
break;
}
}
else
{
a1 = double(i - 1) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if ((a3 <= 49))
{
al[m][i][78 - j] = al[m][i - 1][78 - j] + 2 + double(1) / 160 * n*3.3333/5;
}
else
al[m][i][78 - j] = al[m][i - 1][78 - j] + double(1) / 160 * n*3.3333/5;
}
}
}
}
for (m = 0; m <= 4; m++)
{
n = b[m];
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78; j++)
{
a1 = double(i) / 160 * n*3.3333;
a2 = double(j) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if (a3 < 31.36)
{
times = (5.76 + a3 - 10.24) / (4.8 * sqrt(a3));
dl[m][i][78 - j] = 1.0 - times;
}
else
{
if (i == 0)
for (k = j; k > 0; k--)
{
a1 = double(k) / 160 * n*3.3333;
a3 = a1*a1;
if (a3 <= 31.36)
{
dl[m][i][78 - j] = 2 + (double(j - k)) / 160 * n*3.3333/5;
break;
}
}
else
{
a1 = double(i - 1) / 160 * n*3.3333;
a3 = a1*a1 + a2*a2;
if ((a3 <= 31.36))
{
dl[m][i][78 - j] = dl[m][i - 1][78 - j] + 2 + double(1) / 160 * n*3.3333/5;
}
else
dl[m][i][78 - j] = dl[m][i - 1][78 - j] + double(1) / 160 * n*3.3333/5;
}
}
}
}
al[0][0][78] = a[0][0][0];
al[1][0][78] = a[1][0][0];
al[2][0][78] = a[2][0][0];
al[3][0][78] = a[3][0][0];
al[4][0][78] = a[4][0][0];
dl[0][0][78] = d[0][0][0];
dl[1][0][78] = d[1][0][0];
dl[2][0][78] = d[2][0][0];
dl[3][0][78] = d[3][0][0];
dl[4][0][78] = d[4][0][0];
for (m = 0; m <= 4; m++)
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78; j++)
{
if (a[m][i][j] > al[m][i][j])
ar[m][i][j] = al[m][i][j];
else
ar[m][i][j] = a[m][i][j];
if (d[m][i][j] > dl[m][i][j])
dr[m][i][j] = dl[m][i][j];
else
dr[m][i][j] = d[m][i][j];
}
for (m = 0; m <= 4; m++)
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78;j++)
{
az[m][i][j] = a[m][i][j] * 0.4138 + al[m][i][j] * 0.3793 + ar[m][i][j] * 0.1724;
dz[m][i][j] = d[m][i][j] * 0.4138 + dl[m][i][j] * 0.3793 + dr[m][i][j] * 0.1724;
}
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78; j++)
{
ae[i][j] = az[0][i][j] * 0.3103 + az[1][i][j] * 0.0345 + az[2][i][j] * 0.1034 + az[3][i][j] * 0.3103 + az[4][i][j] * 0.1724;
de[i][j] = dz[0][i][j] * 0.3103 + dz[1][i][j] * 0.0345 + dz[2][i][j] * 0.1034 + dz[3][i][j] * 0.3103 + dz[4][i][j] * 0.1724;
}
for (i = 0; i <= 139; i++)
for (j = 0; j <= 78; j++)
{
total[i][j] = 0.5*ae[i][j] + 0.5*de[i][j];
}
f.setf(ios::showpoint);
/* for (i = 139; i >= 0; i--)
{
for (j = 0; j <= 77; j++)
{
f.precision(6);
f << total[i][j];
f << " ";
if (total[i][j] >= 1) f << " ";
}
f << endl;
}
*/
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(140, 79);
glutInitWindowSize(312, 560);
glutCreateWindow("140*79的屏幕");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
return 0;
}
app触控的代码
最新推荐文章于 2022-08-01 14:36:47 发布