`
ilovezhurong
  • 浏览: 44807 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java游戏编程第7章第2节个人翻译

阅读更多

不要忘记你的数学
在开始3d图形编程之前,让我们一步步谈论三角数学和矢量

,
嘿,不要打瞌睡,我很严肃,你要使用三角函数定义和矢量数

学处理3d图形


三角函数和直角三角形

大量的3d 图形问题可以被直角三角形解决,直角三角形有

一个角是90度,解决一个直角,或计算全部的边长和另两个

角度,你需要知道至少两个信息:两个边或一个边,一个角度
你可能熟悉这个表达式:a2+b2=c2.  这个表达式叫毕达哥

拉斯订立,a,b,c是直角三角形的边,斜边也就是直角的对边

是c, 这个表达式告诉确定这两个边长就可以知道第3个边

长.
   可是,如果你知道一个边和一个角,图7.1中的三角函数

定义将派上用场,正玄定义,余弦和正切告示了直角和角度

的关系,你能够解决各种类型的三角形的换算,
  
矢量数学

 当开始制作3d 图形时,我们表示一个点坐标(x,y,z)
棘手的是,需要重要的理解关于这个坐标可以联系点的空间

和矢量,一个矢量包含大小和方向,象一个速度,和一个矢量

数学的基础,举例一个方向是东,距离是55英里,如果这个x

轴点东边,那么这个矢量 (55,0,0)可以被解释为向东55英

里,相同地,如果这个z轴向南那么这个矢量(0,0,55)
可以被解释为向南55英里.
  在这本书中,你开始在3d vector,但是记住矢量并不限制

这3个尺寸,它可以有仅有两个尺寸或多于3个,本文中,我们

表示矢量是一个大写字母(而不是一个小写或实数)
而且,我们表示一个矢量元素的标识为
V=(Vx, Vy, Vz)

记住,一个矢量是描述了大小和方向,它不具有起点,它不在

乎起点是哪里,换句话说,距离路易斯安那斯向东55英里和

距离巴黎向东55英里是同样的矢量(除了巴黎,你可以使用

公里,如果有这样的想法)
   现在让我们讨论矢量数学,首先,最基本的矢量可以叠加

,在图7.2中所示,矢量u和v的叠加是u+v,减u就是u-v,
矢量-u和-v表示大小于正矢量相同但是方向相反.
   数学中,增加两个3d矢量是叠加他们的大小
u+v=U+V=(Ux+Vx, Uy+Vy, Uz+Vz)
例如,如果一个鸟从向东55英里飞行,逆风向西10英里推动,
那么鸟和风的矢量叠加是45英里,注意增加了两个矢量值在

一个新的不同大小的矢量,一个不同的方向,或都是,当然,

相减也是同样的,更进一步,你可以将矢量的大小相乘,不改

变其方向
s V=(s Vx, s Vy, s Vz)
因此,向东55英里乘2就是向东110英里
一个矢量的大小,或者长度,其长度可以用毕达哥拉斯定理

得立体版表达:
|V|=(Vx2+Vy2+Vz2)1/2
一个长度为1的矢量叫做单位矢量,或者归一矢量,你可以归

一矢量除它的长度,一个单位矢量的符号是个带帽子的U
Û=U/|U|

这里快速介绍了矢量数学,在本章的结尾我们介绍更多的矢

量内容,但是但目前为止我们学到的知识,要进一步创建一

个有用的矢量类---vectoe3D,我们之所以们使用float类型做更多的3d 计算,主要因为它比double类型花费更小,而且满足我们所需要的精度

Listing 7.1 Vector3D.java
package com.brackeen.javagamebook.math3D;

/**
    The Vector3D class implements a 3D vector with the
    floating-point values x, y, and z. Vectors can be thought of
    either as a (x,y,z) point or as a vector from (0,0,0) to
    (x,y,z).
*/
public class Vector3D implements Transformable {

    public float x;
    public float y;
    public float z;


    /**
        Creates a new Vector3D at (0,0,0).
    */
    public Vector3D() {
        this(0,0,0);
    }


    /**
        Creates a new Vector3D with the same values as the
        specified Vector3D.
    */
    public Vector3D(Vector3D v) {
        this(v.x, v.y, v.z);
    }


    /**
        Creates a new Vector3D with the specified (x, y, z) values.
    */
    public Vector3D(float x, float y, float z) {
        setTo(x, y, z);
    }


    /**
        Checks if this Vector3D is equal to the specified Object.
        They are equal only if the specified Object is a Vector3D
        and the two Vector3D's x, y, and z coordinates are equal.
    */
    public boolean equals(Object obj) {
        Vector3D v = (Vector3D)obj;
        return (v.x == x && v.y == y && v.z == z);
    }


    /**
        Checks if this Vector3D is equal to the specified
        x, y, and z coordinates.
    */
    public boolean equals(float x, float y, float z) {
        return (this.x == x && this.y == y && this.z == z);
    }


    /**
        Sets the vector to the same values as the specified
        Vector3D.
    */
    public void setTo(Vector3D v) {
        setTo(v.x, v.y, v.z);
    }


    /**
        Sets this vector to the specified (x, y, z) values.
    */
    public void setTo(float x, float y, float z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }


    /**
        Adds the specified (x, y, z) values to this vector.
    */
    public void add(float x, float y, float z) {
        this.x+=x;
        this.y+=y;
        this.z+=z;
    }


    /**
        Subtracts the specified (x, y, z) values to this vector.
    */
    public void subtract(float x, float y, float z) {
        add(-x, -y, -z);
    }


    /**
        Adds the specified vector to this vector.
    */
    public void add(Vector3D v) {
        add(v.x, v.y, v.z);
    }


    /**
        Subtracts the specified vector from this vector.
    */
    public void subtract(Vector3D v) {
        add(-v.x, -v.y, -v.z);
    }


    /**
        Multiplies this vector by the specified value. The new
        length of this vector will be length()*s.
    */
    public void multiply(float s) {
       x*=s;
       y*=s;
       z*=s;
    }


    /**
        Divides this vector by the specified value. The new
        length of this vector will be length()/s.
    */
    public void divide(float s) {
       x/=s;
       y/=s;
       z/=s;
    }


    /**
        Returns the length of this vector as a float.
    */
    public float length() {
        return (float)Math.sqrt(x*x + y*y + z*z);
    }


    /**
        Converts this Vector3D to a unit vector, or, in other
        words, a vector of length 1. Same as calling
        v.divide(v.length()).
    */
    public void normalize() {
        divide(length());
    }


    /**
        Converts this Vector3D to a String representation.
    */
    public String toString() {
        return "(" + x + ", v + y + ", " + z + ")";
    }
}

这里没有什么复杂的,vector3d有加减乘除,长度和单位矢量

分享到:
评论

相关推荐

    JAVA游戏编程.

    在JAVA游戏编程的世界里,开发者可以利用JAVA的强大功能和丰富的库来创造引人入胜的游戏体验。本课程资料集合了从基础知识到高级技术的全面学习路径,帮助你深入理解JAVA在游戏开发中的应用。 首先,从第二章的...

    Java游戏编程原理与实践教程+随书原代码

    Java游戏编程原理与实践教程是一本深入探讨如何使用Java语言进行游戏开发的专业书籍。它涵盖了游戏编程的基础概念、核心技术以及实战技巧,旨在帮助读者从零基础到熟练掌握Java游戏开发。书中结合了大量的实例和源...

    Java游戏编程初级教程

    Java游戏编程初级教程是针对初学者的一份详细指南,旨在教授如何使用Java语言进行游戏开发。这份教程将涵盖从基础知识到实际应用的各种概念和技术,帮助读者建立起坚实的游戏开发基础。 一、Java语言基础 在开始...

    Java2游戏编程_随书源代码

    Java 2游戏编程是计算机科学领域的一个重要主题,它涵盖了使用Java语言开发互动式游戏的各种技术和策略。在《Java 2游戏编程》这本书中,作者深入浅出地讲解了如何利用Java的强大功能来构建引人入胜的游戏。本书的随...

    Java游戏编程起步

    Java游戏编程是软件开发领域中的一个热门话题,尤其对于初学者和希望在游戏行业中发展的人来说。本资源"Java游戏编程起步"旨在引导你踏入这个精彩的世界。以下是一些关于Java游戏编程的重要知识点: 1. **Java语言...

    Java游戏编程初步

    让我们深入探讨Java游戏编程的基本概念、技术栈和关键知识点。 一、Java语言基础 Java是一种面向对象的编程语言,以其跨平台特性闻名,这使得Java成为开发游戏的理想选择。理解类、对象、封装、继承和多态等面向...

    Java游戏编程CH05.rar_Java游戏

    在本资源"Java游戏编程CH05.rar"中,我们主要关注的是第五章的内容,它是一本关于使用Java进行游戏编程的学习资料。这个章节可能是书中的一个重要转折点,因为游戏编程通常涉及到许多复杂的概念和技术,如图形渲染、...

    Java趣味编程100例 清华大学出版社.zip

    第7章介绍了10个逻辑推理;第8章介绍了8个趣味变幻;第9章介绍了9个定理与猜想;第10章介绍了9个趣味游戏;第11章介绍了11个其他趣味问题。  本书适合高校、职业技术院校及社会培训学校的学生阅读,也适合Java编程...

    JAVA游戏编程导学

    本导学将深入探讨Java游戏编程的基础知识,涵盖核心概念、工具和技术,以帮助初学者入门。 首先,我们需要了解Java的基础。Java是一种静态类型的、面向对象的编程语言,由James Gosling在1995年推出。它的设计目标...

    Java游戏编程CH02.rar_Java游戏_java 游戏

    在本资源"Java游戏编程CH02.rar"中,我们主要关注的是利用Java语言进行游戏开发的相关知识。Java作为一种广泛使用的编程语言,以其跨平台性和高效性,成为了开发游戏的热门选择,尤其对于初学者来说,Java提供了良好...

    Java实用编程技术第章-Java语言概述及编程基础.pptx

    2、面向对象:Java语言是一种面向对象的编程语言,支持继承、多态、封装等面向对象的编程思想。 3、分布式:Java语言支持分布式编程,能够在各种消费性电子产品上运行。 4、高效解释执行:Java语言具有高效的解释...

    Java游戏编程初步3.rar_Java游戏_java 游戏

    标题“Java游戏编程初步3”表明这是一个系列教程的第三部分,可能涵盖了一些进阶的主题,比如游戏循环、碰撞检测或对象动画。这部分教程可能是前两部分基础知识的延续,如变量、条件语句、循环和面向对象编程的巩固...

    Java游戏编程初步2.rar_Java游戏

    这篇初步教程将引导你探索Java游戏编程的基础,让你在游戏开发的世界中迈出第一步。首先,我们来深入理解Java游戏编程的一些核心概念和技术。 Java作为一种广泛使用的面向对象编程语言,以其跨平台性、高效性和强大...

    java游戏编程课件ppt汇总

    Java游戏编程是软件开发领域中的一个分支,它利用Java编程语言来创建互动式的电子游戏。这份"java游戏编程课件ppt汇总"包含了丰富的学习资源,旨在帮助教师进行教学,同时也适用于自学者提升技能。以下是对这些知识...

    java游戏编程 对JAVA中游戏的编程进行全面介绍

    Java游戏编程是一个广阔而引人入胜的领域,它涵盖了从简单的2D游戏到复杂的3D图形和网络多人游戏的所有内容。"JAVA中游戏的编程进行全面介绍"这本书,显然是一个面向中级到高级Java开发者的资源,旨在提升他们在游戏...

    Java游戏编程教程

    在《Java游戏编程教程》中,我们将会深入探讨如何利用Java这一强大且广泛使用的编程语言来构建各种类型的游戏。这不仅涵盖了基础的游戏编程概念,还包括了具体的实现技术和最佳实践。以下是一些关键的知识点,根据...

    精通Java:JDK、数据库系统开发Web开发(实例代码)

    第7章 Java异常处理机制 第8章 Java反射机制 第9章 数据结构与集合类 第3篇 图形用户界面 第10章 Java Swing(上) 第11章 Java Swing(下) 第12章 Applet网页小程序 第13章 图形编程 第14章 多媒体编程 第4篇 Java...

    疯狂java实例-第7章_单机连连看

    【疯狂Java实例-第7章_单机连连看】章节主要介绍了如何使用Java语言开发一款单机连连看游戏。连连看是一种广受欢迎的休闲游戏,玩家需要找出并消除屏幕上成对出现的相同图案。本章内容包括游戏的简介、原理以及具体...

    Java网络编程-第三版(中文版).pdf(Elliotte Rusty Harold)

    《Java网络编程》第三版是由Elliotte Rusty Harold编著的一本专业书籍,中文版为国内Java开发者提供了深入理解网络编程的宝贵资源。这本书详细介绍了如何使用Java语言进行网络应用开发,涵盖了从基础概念到高级技术...

    java小游戏编程源代码象棋游戏网络对战版

    (7)参照第7章文档中的7.3.5节中的第5小节,为MyEclipse配置Tomcat服务器。 (8)单击工具栏的“”按钮,将弹出如图1.3所示的对话框。这个对话框是项目发布对话框,在对话框的“Project”下拉选择框中选择本系统的...

Global site tag (gtag.js) - Google Analytics