给学生物的一个同学写的计算原子距离的简易程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 原子计算 { class Program { //定义原子 public class YuanZi { public string No = "";//编号 public float x = 0; public float y = 0; public float z = 0; } public class YuanZiDistance { public string No = "";//编号 public float Distance = 0; //距离 } public static int MaxNum=MaxNum; public static YuanZi[] allYuanZi = new YuanZi[MaxNum]; //全部原子数 static void Main(string[] args) { int maxYuaanZi = MaxNum; //原子个数 InputData(); for (int i = 0; i < maxYuaanZi; i++) { YuanZi[] nearFourYuanZi = GetEveryYuanZiAroundFourYuanZi(allYuanZi[i]);//获取最近的四个原子 JiSuan(nearFourYuanZi, allYuanZi[i]); } } private static void InputData() { for (int i = 0; i < MaxNum; i++) { allYuanZi[i].No = ""; allYuanZi[i].x = 0; allYuanZi[i].y = 0; allYuanZi[i].z = 0; } } /// <summary> /// /// </summary> /// <param name="nearFourYuanZi"></param> private static void JiSuan(YuanZi[] nearFourYuanZi,YuanZi thisYuanZi) { // 周围四个原子 每个原子都要计算一遍 for (int i = 0; i < 4; i++) { int Result= CalCuleJuli(thisYuanZi, nearFourYuanZi[i]); //打印本原子 的距离 } } /// <summary> /// 获取周围的四个最近的原子 /// </summary> /// <param name="oneYaunzi"></param> /// <returns></returns> public static YuanZi[] GetEveryYuanZiAroundFourYuanZi(YuanZi oneYaunzi) { YuanZi [] nearFourYuanZi=new YuanZi[4]; YuanZiDistance[] JuliAndBianHao = GetOtherYuanZiToThis(allYuanZi, oneYaunzi); //所有的其他原子与本原子的距离, 总共有N-1个数 YuanZiDistance[] allYuanZiDistanceSort = SortYuanZi(JuliAndBianHao); //排序所有的距离这些距离 YuanZi[] YuanZiAll = GetYuanZzi(allYuanZiDistanceSort); //获取排序之后的距离和编号,按照距离取出所有的原子 nearFourYuanZi = GetVeryCloseYuanZI(YuanZiAll); //只取出前四个 return nearFourYuanZi; } /// <summary> /// 获取原来的原子 /// </summary> /// <param name="allYuanZiDistanceSort"></param> /// <returns></returns> private static YuanZi[] GetYuanZzi(YuanZiDistance[] allYuanZiDistanceSort) { YuanZi[] allNewYuanZi = new YuanZi[MaxNum]; for (int i = 0; i < allYuanZiDistanceSort.Count(); i++) { for (int j = 0; j < MaxNum; j++) { if (allYuanZi[j].No == allYuanZiDistanceSort[i].No) { allNewYuanZi[i] = allYuanZi[j];// } } } return allNewYuanZi; } /// <summary> /// 本原子核其他所有的原子的距离 /// </summary> /// <param name="allYuanZi"></param> /// <param name="oneYaunzi"></param> /// <returns></returns> private static YuanZiDistance[] GetOtherYuanZiToThis(YuanZi[] allYuanZi, YuanZi oneYaunzi) { YuanZiDistance[] BianHaoJuli = new YuanZiDistance[9];//int[,] JuliAndBianHao = new int[9, 1]; //原子当前处理的原子编号和其他原子与本原子的距离 for (int i = 0; i < MaxNum; i++) { if (allYuanZi[i].No != oneYaunzi.No) //其他原子 { int distance = CalCuleJuli(oneYaunzi, allYuanZi[i]); BianHaoJuli[i].No = oneYaunzi.No; BianHaoJuli[i].Distance = distance; } } return BianHaoJuli; } /// <summary> /// 两个原子的距离 /// </summary> /// <param name="oneYaunzi"></param> /// <param name="yuanZi"></param> /// <returns></returns> private static int CalCuleJuli(YuanZi oneYaunzi, YuanZi yuanZiOther) { int l=0; l = Math.Sqrt(((oneYaunzi.x - yuanZiOther.x) * (oneYaunzi.x - yuanZiOther.x) + (oneYaunzi.y - yuanZiOther.y) * (oneYaunzi.y - yuanZiOther.y) + (oneYaunzi.Z - yuanZiOther.z) * (oneYaunzi.z - yuanZiOther.z))); return l; } /// <summary> /// 排序算法 /// </summary> /// <param name="allYuanZiDistance"></param> /// <returns></returns> private static YuanZiDistance[] SortYuanZi(YuanZiDistance[] JuliAndBianHao) { for (int i = 0; i < JuliAndBianHao.Length; i++) { for (int j = 0; j < JuliAndBianHao.Length; j++) { if (JuliAndBianHao[i].Distance > JuliAndBianHao[j].Distance) { YuanZiDistance temp = new YuanZiDistance(); temp.Distance = JuliAndBianHao[i].Distance; temp.No = JuliAndBianHao[i].No; JuliAndBianHao[i].No = JuliAndBianHao[j].No; JuliAndBianHao[i].Distance = JuliAndBianHao[j].Distance; JuliAndBianHao[j].No = temp.No; JuliAndBianHao[j].Distance = temp.Distance; } } } return JuliAndBianHao; } /// <summary> /// 最近的四个原子 /// </summary> /// <param name="allYuanZiDistance"></param> /// <returns></returns> private static YuanZi[] GetVeryCloseYuanZI(YuanZi[] allYuanZiDistance) { YuanZi[] nearFourYuanZi = new YuanZi[4]; for (int i = 0; i < 9; i++) { if (i < 4) { nearFourYuanZi[i] = allYuanZiDistance[i]; } } return nearFourYuanZi; } } }
posted on 2013-03-05 17:00 遥远的青苹果-李院长 阅读(207) 评论(0) 编辑 收藏 举报