原子电子运行模型

原子电子运行模型

  在原子电子运行模型当中运用了模型变换以及栈知识,具体代码如下:

// myOpengl.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

// simpleGL.cpp : Defines the entry point for the console application.
//
#include <stdlib.h>
#include <GL\glut.h>

#include <iostream>
using namespace std;

void RenderScene()
{
    static GLfloat fElect = 0.0f;
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glTranslatef(0.0f,0.0f,-100.0f);
    glColor3f(1.0f,0.0f,0.0f);
    glutSolidSphere(10.0f,25,25);
    glPushMatrix();

    glColor3f(1.0f,1.0f,0.0f);

    glRotatef(fElect,0.0f,1.0f,0.0f);
    glTranslatef(90.0f,0.0f,0.0f);
    glutSolidSphere(6.0f,25,25);

    glPopMatrix();
    glPushMatrix();

    glRotatef(45.0f,0.0f,0.0f,1.0f);
    glRotatef(fElect,0.0f,1.0f,0.0f);
    glTranslatef(-70.0f,0.0f,0.0f);
    glutSolidSphere(6.0f,25,25);

    glPopMatrix();
    glPushMatrix();

    glRotatef(-45.0f,0.0f,0.0f,1.0f);
    glRotatef(fElect,0.0f,1.0f,0.0f);
    glTranslatef(0.0f,0.0f,60.0f);
    glutSolidSphere(6.0f,15,15);

    glPopMatrix();

    fElect += 10.0f;
    if(fElect>360.0)
        fElect = 0.0f;

    glutSwapBuffers();
}

void ChangeSize(GLsizei w,GLsizei h)
{
    if(h==0)
        h = 1;

    GLfloat aspectRatio = (GLfloat)w/(GLfloat)h;

    glViewport(0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    if(w<h)
        glOrtho(-100.0,100.0,-100.0/aspectRatio,100.0/aspectRatio,200.0,-200.0);
    else
        glOrtho(-100.0*aspectRatio,100.0*aspectRatio,-100.0,100.0,200.0,-200.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void SetupRC()
{
    glClearColor(0.0f,0.0f,0.0f,1.0f);
    glColor3f(1.0f,0.0f,0.0f);
}
void TimerFunction(int value)
{
    glutPostRedisplay();
    glutTimerFunc(33,TimerFunction,1);
}

int main(int argc, char *argv[])
{
   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
   glutInitWindowSize(800,600);
   glutCreateWindow("Simple");

   glutDisplayFunc(RenderScene);
   glutReshapeFunc(ChangeSize);
   glutTimerFunc(33,TimerFunction,1);
  //glutSpecialFunc(SpecialKeys);

   SetupRC();
   glutMainLoop();
   return 0;
}

  首先,通过运行这个程序发现glRotatef(angle,0,0,1)函数总是以当前的XOY平面作为旋转的平面的,见代码:

glRotatef(45.0f,0.0f,0.0f,1.0f);

glRotatef(fElect,0.0f,1.0f,0.0f);

glTranslatef(-70.0f,0.0f,0.0f);

glutSolidSphere(6.0f,25,25);

其中第一行决定了旋转的平面为经过45旋转后的XOZ平面,第二行类似。需要注意的是要使电子离开原子核绕原子旋转,必须先使用glRotatef()函数,然后使用glTranslatef()函数。其次,使用glPushMatrix()函数使得当前缓冲区中的矩阵X被保存到栈中,并且当前缓冲区中的矩阵仍为X。当使用glPopMatrix()函数的时候可以将栈顶的矩阵恢复到缓冲区当中,同时弹出栈顶。注意到代码当中成对出现的
glPopMatrix();
glPushMatrix();这也是一种用法,通常将刚弹出的矩阵又保存入栈中,主要就是为了在缓冲区中反复使用的目的。
 
时间: 2024-10-13 05:49:25

原子电子运行模型的相关文章

ASP.NET在IIS 5/6上的运行模型(ISAPI)

IIS 5.X中的ASP.NET 实现了Web Server和ASP.NET App的分离. IIS作为Web Server运行在InetInfo.exe进程上.该进程是非托管的本地进程. ASP.NET App运行在aspnet_wp的Worker进程上.该进程初始化时会加载CLR,所以是一个托管进程. 通过创建虚拟目录将资源Host到IIS下,然后就可以通过IIS访问所有资源. Server会区分静态资源和动态资源. 对于静态资源的请求,不需要Server进行任何的处理,直接提取对应的文件作

[书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型

本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 本书第一章我们探讨了JavaScri

Spark Core源代码分析: Spark任务运行模型

DAGScheduler 面向stage的调度层,为job生成以stage组成的DAG,提交TaskSet给TaskScheduler运行. 每个Stage内,都是独立的tasks,他们共同运行同一个compute function,享有同样的shuffledependencies.DAG在切分stage的时候是按照出现shuffle为界限的. private[spark] class DAGScheduler( taskScheduler: TaskScheduler, listenerBus

TensorFlow 运行模型--会话(Session)

会话模式一: 需要明确调用会话生成函数和关闭函数 # 创建一个会话 sess = tf.Session() # 使用创建好的会话进行运算 sess.run("要运算的对象") # 关闭会话使本次运行使用的资源得以释放 sess.close() 会话模式二: 创建一个会话,并通过python上下文管理器管理会话 with tf.Session() as sess: sess.run(...) # 括号里是要运行的对象 # 计算结束后会自动关闭会话(仅能在with内部使用) 通过会话获取张

3.3 TensorFlow运行模型 ------- 会话

会话拥有并管理TensorFlow程序运行时的所有资源.当计算完成后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄漏的问题. TensorFlow中使用的会话模式一般有梁总,第一种模式需要明确调用会话生成函数和关闭会话函数,代码流程如下: #创建一个会话 sess = tf.Session() #使用这个创建好的会话得到关心的运算的结果 sess.run(....) #关闭会话使得本次运行中使用到的资源得以释放 sess.close() 上述方法计算完成时,需要明确调用Session.cl

Tensorflow运行模型——会话

会话拥有并管理tensorflow程序运行时的所有资源.所有计算完成后需要关闭会话来帮组系统回收资源. 使用会话模式有两种: 但是,第一种方法有缺陷,所以直接给出下面这种 with tf.Session() as sess: #使用创建好的会话来计算关心的结果 sess.run(...) 从会话中取出变量 方法一: sess=tf.Session() with sess.as_default(): print(变量名.eval()) 方法二: sess=tf.Session() print(se

模型自动化运行利器——IBM SPSS Modeler Batch

背景介绍 很多用户都会关注一个问题,就是模型创建完成之后,如何自动化运行模型,因为不可能每次要运行都要打开SPSS Modeler客户端,点击“运行”,那么今天这篇文章就给大家介绍下通过IBM SPSS Modeler Batch批处理模式实现自动化运行模型的过程. IBM SPSS Modeler Batch可以实现不需要打开IBM SPSS Modeler客户端,不需要用户干预就可以自动地周期性地运行任务, 需要注意的是,IBM SPSS Modeler Batch必须是有购买IBM SPS

关于事件模型的一些看法

http://forkme.info/about-event-loop/ 概述 事件处理模型, 也即是全异步事件处理模型.在以前, 对于那些同时执行多项任务, 但仍能响应用户交互的应用程序通常需要实施一种使用多进程(如linux的fork操作)或者多线程的操作.对于低并发的环境, 这样做无疑能避免进程因等待某个操作而出现"假死"现象.但对于更复杂的异步应用程序或者是要求高并发的环境, 就要使用事件模型来处理异步事件, 这样做有很多好处: 在高并发条件下响应用户时间更快; 内存消耗降低,

并发模型—共享内存模型(线程与锁)示例篇

共享内存模型,顾名思义就是通过共享内存来实现并发的模型,当多个线程在并发执行中使用共享资源时如不对所共享的资源进行约定或特殊处理时就会出现读到脏数据.无效数据等问题:而为了决解共享资源所引起的这些问题,Java中引入了同步.锁.原子类型等这些用于处理共享资源的操作; 在本篇文章中,将通过几个Demo来介绍Java的synchronized.lock.atomic相关类等,Java的共享内存并发模型也就体现在同步(synchronized).锁(lock)等这些实现上: 同步: Demo中开启两个