Point3D.cs
上传用户:huazai0421
上传日期:2008-05-30
资源大小:405k
文件大小:3k
源码类别:

SilverLight

开发平台:

C#

  1. // Silver.Globe, version 0.11 for Silverlight 1.1 Alpha
  2. // Copyright © Florian Krüsch (xaml-kru.com)
  3. // xaml-kru.com/silverglobe
  4. // This source is subject to the Microsoft Public License (Ms-PL).
  5. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/publiclicense.mspx.
  6. // All other rights reserved.
  7. using System;
  8. using System.Windows;
  9. namespace SilverGlobe.Math3D
  10. {
  11.     /// <summary>
  12.     /// Represents a point in 3D space.
  13.     /// </summary>
  14.     public struct Point3D : IEquatable<Point3D>
  15.     {
  16.         #region Members
  17.         private Double _x, _y, _z;
  18.         #endregion
  19.         #region Properties
  20.         public Double X 
  21.         {
  22.             get { return _x; }
  23.             set { _x = value; }
  24.         }
  25.         public Double Y
  26.         {
  27.             get { return _y; }
  28.             set { _y = value; }
  29.         }
  30.         public Double Z
  31.         {
  32.             get { return _z; }
  33.             set { _z = value; }
  34.         }
  35.         #endregion
  36.         #region Constructor
  37.         public Point3D(Double x, Double y, Double z)
  38.         {
  39.             _x = x;
  40.             _y = y;
  41.             _z = z;
  42.         }
  43.         #endregion
  44.         #region Methods
  45.         /// <summary>
  46.         /// Returns the 2D part of the 3D point.
  47.         /// </summary>
  48.         public Point ToPoint()
  49.         {
  50.             return new Point(_x, _y);
  51.         }
  52.         #endregion
  53.         #region Equality
  54.         public override Boolean Equals(object o)
  55.         {
  56.             if (!(o is Point3D)) return false;
  57.             return Equals((Point3D)o);
  58.         }
  59.         public Boolean Equals(Point3D p)
  60.         {
  61.             return Equals(this, p);
  62.         }
  63.         public static Boolean Equals(Point3D a, Point3D b)
  64.         {
  65.             return a._x == b._x && a._y == b._y && a._z == b._z;
  66.         }
  67.         public override Int32 GetHashCode()
  68.         {
  69.             return _x.GetHashCode() ^ _y.GetHashCode() ^ _z.GetHashCode();
  70.         }
  71.         #endregion
  72.         #region Operators
  73.         public static Vector3D operator -(Point3D a, Point3D b)
  74.         {
  75.             return new Vector3D(a.X - b.X, a.Y - b.Y, a.Z - b.Z);
  76.         }
  77.         public static Point3D operator +(Point3D p, Vector3D v)
  78.         {
  79.             return new Point3D(p.X + v.X, p.Y + v.Y, p.Z + v.Z);
  80.         }
  81.         public static Point3D operator *(Point3D p, Double k)
  82.         {
  83.             return new Point3D(p._x * k, p._y * k, p._z * k);
  84.         }
  85.         public static Boolean operator ==(Point3D a, Point3D b)
  86.         {
  87.             return a.X == b.X && a.Y == b.Y && a.Z == b.Z;
  88.         }
  89.         public static Boolean operator !=(Point3D a, Point3D b)
  90.         {
  91.             return !(a == b);
  92.         }
  93.         #endregion
  94.     }
  95. }