给学生物的一个同学写的计算原子距离的简易程序 遥远的青苹果

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;
        } 

    } 

}
原文地址:https://www.cnblogs.com/lixinhai/p/2944695.html