zoukankan      html  css  js  c++  java
  • 给学生物的一个同学写的计算原子距离的简易程序 遥远的青苹果

    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;
            } 
    
        } 
    
    }
    
  • 相关阅读:
    分布式架构的演进,分析的很详细,很到位
    腾讯云直播user_sig生成注意事项
    应用TortoiseGit为github账号添加SSH keys
    Mysql 告警 :Establishing SSL connection without server's identity verification is not recommended.
    log4j的1.2.15版本,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......
    log4j.properties 详解与配置步骤
    Java 支持JavaScript脚本计算
    Struts2自定义返回Json类型result
    通过struts2-spring-plugin集成Struts2和Spring,报错:ClassNotFound:*Interceptor.......
    Struts Filter告警:FilterDispatcher <<< is deprecated! Please use the new filters!
  • 原文地址:https://www.cnblogs.com/lixinhai/p/2944695.html
Copyright © 2011-2022 走看看