像元纯度指数算法C++实现

原创 2015年11月18日 17:02:16



#include "stdafx.h"
# include <iostream>
#include <math.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	//行数
	const int n=10000; 
	//散点坐标
	double x[n];
	double y[n];
	double xSum=0;
	double ySum=0;

	//随机生成坐标点
	for (int i=0;i<n;i++)
	{
		x[i]=rand()%n;
		y[i]=rand()%n;
	} 

	//投影点的平均值
	double xAve;
	double yAve;
	//像元纯度指数
	double PPI[n];

	for (int i=0;i<n;i++)
	{
		PPI[i]=0;
	}
	//基向量的不同角度
	int angle[6]={90,30,60,0,120,150};
	//基向量斜率
	double slope;
	
	for (int k=0;k<6;k++)
	{
		xSum=0;
		ySum=0;
		cout<<angle[k]<<" ";
		//垂直向量
		if (angle[k]==90)
		{
			xAve=0;
			//求Y的平均值
 			double yTempSum=0;
 			for (int i=0;i<n;i++)
 			{
 				yTempSum+=y[i];
 			} 
 			yAve=yTempSum/n;
		}
		//水平向量
		else if (angle[k]==0)
		{
			yAve=0;
			//求x平均值
			double xTempSum=0;
			for (int i=0;i<n;i++)
			{
				xTempSum+=x[i];
			} 
			xAve=xTempSum/n;
		}
		else
		{
			double xTempSum=0;
			double yTempSum=0;
			//求投影坐标平均值
			slope=tan((double)angle[k]*3.1415926/180);
			//计算每个点投影坐标,并加和
			for (int i=0;i<n;i++)
			{
				xTempSum+=(x[i]+slope*y[i])/(slope*slope+1);
				yTempSum+=slope*(x[i]+slope*y[i])/(slope*slope+1);				
			} 
			xAve=xTempSum/n;
			yAve=yTempSum/n;
		}
		cout<<xAve<<" "<<yAve<<endl;

		//计算PPI总和
		for (int i=0;i<n;i++)
		{
			if (angle[k]==90)
			{
				PPI[i]+=abs(y[i]-yAve);
			}
			else if (angle[k]==0)
			{
				PPI[i]+=abs(x[i]-xAve);
			}
			else
			{
				slope=tan((double)angle[k]*3.1415926/180);
				//点在基向量上的投影坐标
				double xProj=(x[i]+slope*y[i])/(slope*slope+1);
				double yProj=slope*(x[i]+slope*y[i])/(slope*slope+1);
				PPI[i]+=sqrt((xProj-xAve)*(xProj-xAve)+((yProj-yAve))*(yProj-yAve));
			}
		}		
	}
	//对PPI进行冒泡排序:递增
	for (int i=0;i<n;i++)
	{		
		for (int j=0;j<n-i-1;j++)
		{
			double currLenj=PPI[j];
			double currlenj1=PPI[j+1];

			if (currLenj>currlenj1)
			{
				//交换顺序x
				int tempX=x[j];
				x[j]=x[j+1];
				x[j+1]=tempX;	

				//交换顺序y
				int tempY=y[j];
				y[j]=y[j+1];
				y[j+1]=tempY;	

				//交换每个PPI顺序
				double tempLen=PPI[j];
				PPI[j]=PPI[j+1];
				PPI[j+1]=tempLen;

			}
		}
	}

	int m=n*0.85;

	for (int j=0;j<m;j++)
	{
		double length=PPI[j]/100000;
		cout<<length<<" "<<x[j]<<" "<<y[j]<<endl;
	}
}


#include "stdafx.h"
# include <iostream>
using namespace std;
#include <fstream>
 


int _tmain(int argc, _TCHAR* argv[])
{
	//行数
	const int n=10000; 

	double a[n][2];
	double xSum=0;
	double ySum=0;

	for (int i=0;i<n;i++)
	{
		a[i][0]=rand()%n;
		a[i][1]=rand()%n;
		cout<<a[i][0]<<" "<<a[i][1]<<endl;
		xSum+=a[i][0];
		ySum+=a[i][1];
	} 

	cout<<xSum<<" "<<ySum<<endl;
	double xAve=xSum/n;
	double yAve=ySum/n;
	cout<<xAve<<" "<<yAve<<endl;
	//计算距离
	double maxLen=0;
	int maxIndex=0;
	//排序后位置
	int location[n];
	
	//冒泡排序
	for (int i=0;i<n;i++)
	{		
		for (int j=0;j<n-i-1;j++)
		{
			double currLenj=sqrt((a[j][0]-xAve)*(a[j][0]-xAve)+(a[j][1]-yAve)*(a[j][1]-yAve));
			double currlenj1=sqrt((a[j+1][0]-xAve)*(a[j+1][0]-xAve)+(a[j+1][1]-yAve)*(a[j+1][1]-yAve));

			if (currLenj>currlenj1)
			{
				//交换顺序x
				int tempX=a[j][0];
				a[j][0]=a[j+1][0];
				a[j+1][0]=tempX;	

				//交换顺序y
				int tempY=a[j][1];
				a[j][1]=a[j+1][1];
				a[j+1][1]=tempY;				
			}
		}
		location[i]=maxIndex;
	}
	int m=n*0.85;
	for (int j=0;j<m;j++)
	{
		double length=(a[j][0]-xAve)*(a[j][0]-xAve)+(a[j][1]-yAve)*(a[j][1]-yAve);
		cout<<length<<" "<<a[j][0]<<" "<<a[j][1]<<endl;
	}
	
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C/C++实现大数模指数运算-二进制算法(a^e mod m 当e特别巨大时...)

模指数运算: 已知a, e, m, 计算ae mod m ➡ a: 底数, e: 指数, m: 模数  ❖ 应⽤用: 公钥密码体制, 哈希函数  示例例: 计算2^90 mod 13  当e很大时,...

机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度

(1)关于ID3算法百度文库有一篇十分详细的文章,介绍看一个例子,给出了具体的计算过程。 文章链接:http://wenku.baidu.com/view/7933c2f6f61fb7360b4...

机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度

机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度 2014-12-2阅读552 评论0 (1)关于ID3算法百度文库有一篇十分详细的文章,介绍看一个例子,给出...

机器学习实战之决策树(1)---ID3算法与信息熵,基尼不纯度

关于ID3算法百度文库有一篇十分详细的文章,介绍看一个例子,给出了具体的计算过程。 文章链接:http://wenku.baidu.com/view/7933c2f6f61fb7360b4c65fd....
  • chchlh
  • chchlh
  • 2014年12月02日 11:26
  • 2310

二次指数平滑算法Python实现

import pandas as pd import numpy as np import matplotlib.pyplot as plt import pymysql # Read data fr...

超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。

今天我们来花点时间再次谈谈一个模糊算法,一个超级简单但是又超级牛逼的算法,无论在效果上还是速度上都可以和Boxblur, stackblur或者是Gaussblur想媲美,效果上,比Boxblur来的...

PhotoShop算法实现-- Gamma校正(指数变换)(五)

PhotoShop Gamma校正(指数变换)(五) kezunhai@gmail.com http://blog.csdn.net/kezunhai           Gamma曲线是一种特殊...

php实现弗吉尼亚算法加密解密以及重合指数分析

哈工大密码学原理实验一:古典密码体制的实践与分析: 实验项目描述: Z26上的维吉尼亚密码体制: (1) 编写密钥为 (k1,k2,…,kn)的维吉尼亚加、解密程序 ,其中n 值由用户输入,密钥...

快速指数算法 和 求逆元算法

源地址:http://www.cnblogs.com/yinghuochong/archive/2011/10/08/2203107.html 快速指数算法 和 求逆元算法 快速指数算...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:像元纯度指数算法C++实现
举报原因:
原因补充:

(最多只允许输入30个字)