каталог
Итоги работы два
Интернет отладки под 1.1 VS
В последнее время с помощью VS2015 появляются странные сцены , когда онлайн отладки (как если встречается один раз до):
После присваивания переменной, в цепи отладчик все еще не может изменить !!
После присваивания переменной, в цепи отладчик все еще не может изменить !!
Есть два решения:
- [Х] платформа обмена
Старайтесь не нарушать точку в режиме отладки Release (значение печати и PRINTF наблюдений не соответствуют)
Интернет отладка с помощью отладки, результатов выполнения теста с использованием релиза
- [Х] Код Спецификация записи
Эта спецификация включает в себя множество аспектов, с конкретной ссылкой на спецификацию коды от Microsoft
Например, встреча вещи:
-0.5
и-1.0*0.5
Первый из них является проходом, который может
1.2 по модулю отрицательной
Проблемы , возникающие всегда замечательные работы -1%31=????
, взять остаток отрицательные и положительные числа, сколько?
- Режим отладки с помощью VS2015 компилятора, C ++,
-1% 30 = -1
- В режиме Python3
-1% 30 = 29
В конце концов, что является правильным?
Интернет не специально части информации, все они расплывчаты, следующие коды, чтобы дать модулю
#ifndef MOD
#define MOD(a,b) (abs(a+b) % abs(b))
#endif
Функция 1.3 OpenCV в cartToPolar
Непосредственно по коду:
typedef struct IMAGE_S_t
{
int rows;
int cols;
void* data;
}IMAGE_S;
void CartToPolar(IMAGE_S*src1, IMAGE_S*src2, IMAGE_S* magnitude, IMAGE_S*angle)
{
int i, j;
float tmpData1, tmpData2, tmpAngle;
assert(src1->rows == src2->rows);
assert(src1->rows == src2->rows);
for (i = 0; i < src1->rows; i++)
{
for ( j = 0; j < src1->cols; j++)
{
tmpData1 = *((float*)src1->data + src1->cols*i + j);
tmpData2 = *((float*)src2->data + src2->cols*i + j);
*((float*)magnitude->data + magnitude->cols*i + j) = sqrt(pow(tmpData1, 2) + pow(tmpData2, 2));
tmpAngle = atan2(tmpData2, tmpData1);
*((float*)angle->data + angle->cols*i + j) = tmpAngle < 0 ? tmpAngle + 2.*CV_PI : tmpAngle;
}
}
return ;
}
1.4 QR матрица собственных значений и
Например:
// 解算[[1,1],[1,1]]
// 矩阵不为满秩的情况下,QR的方法是解算不出来的(可能有改进的方法,网上看了几个都解算不出来)
// 对[[0,0],[0,0]]等情况做了一些小trick
// python结果eigenValue:[0,0]. eigenVector:[[1,0],[0,1]]
// 基本思路没改变
Небольшой трюк, сделать проект только что использовали:
Для получения дополнительной информации см QP решатель код C
void ImageGetEigen(IMAGE_S* src, IMAGE_S* eigenValue, IMAGE_S* eigenVector, int iterNum)
{
assert(src->rows == src->cols);
assert(src->rows > 0);
IMAGE_S temp, temp_R;
int i, j, k;
float tmpValue;
ImageCreate(&temp, src->rows, src->cols, FloatFlag);
ImageCreate(&temp_R, src->rows, src->cols, FloatFlag);
ImageCreate(eigenValue, src->rows, 1, FloatFlag);
ImageCreate(eigenVector, src->rows, src->cols, FloatFlag);
memcpy(temp.data, src->data, sizeof(float)*src->rows*src->cols);
//使用QR分解求矩阵特征值
for (int k = 0; k < iterNum; k++)
{
ImageQR(&temp, eigenVector, &temp_R);
free(temp.data);//由于ImageDot直接创建dst,所以这里得free,后期可以改进
ImageDot(&temp_R, eigenVector, &temp);
}
//获取特征值并排序
for (k = 0; k < temp.cols; k++)
{
tmpValue = ((float*)temp.data)[k * temp.cols + k];
for (i = k + 1; i < temp.cols; i++)
{
if (((float*)temp.data)[i * temp.cols + i]>tmpValue)
{
tmpValue = ((float*)temp.data)[i * temp.cols + i];
((float*)temp.data)[i * temp.cols + i] = ((float*)temp.data)[k * temp.cols + k];
((float*)temp.data)[k * temp.cols + k] = tmpValue;
}
}
((float*)eigenValue->data)[k] = ((float*)temp.data)[k * temp.cols + k];
}
ImageEig(src, eigenVector, eigenValue);
free(temp.data);
free(temp_R.data);
for ( i = 0; i < eigenValue->rows*eigenValue->cols; i++)
{
if (isnan(((float*)eigenValue->data)[i]))
((float*)eigenValue->data)[i] = 0.0f;
}
for (i = 0; i < eigenVector->rows*eigenVector->cols; i++)
{
if (isnan(((float*)eigenVector->data)[i]))
((float*)eigenVector->data)[i] = 0.0f;
}
float numT[4];
numT[0] = ((float*)src->data)[0 * src->cols + 0];
numT[1] = ((float*)src->data)[0 * src->cols + 1];
numT[2] = ((float*)src->data)[1 * src->cols + 0];
numT[3] = ((float*)src->data)[1 * src->cols + 1];
if (Equal(numT[0], numT[1]) && Equal(numT[0], numT[2]) && Equal(numT[0], numT[3]))
{
memset(eigenValue->data, 0, sizeof(float)*eigenValue->rows*eigenValue->cols);
memset(eigenVector->data, 0, sizeof(float)*eigenVector->rows*eigenVector->cols);
((float*)eigenVector->data)[0 * eigenVector->cols + 0] = 1;
((float*)eigenVector->data)[1 * eigenVector->cols + 1] = 1;
}
return;
}