1

半径Rの円と、その中心が点(0,0)にあり、点P(x、y)が円上にあります(x * x + y * y = R * R)。点Pを円上で時計回りに角度Zで移動し、新しい点の座標を見つける必要があります。これを行うための数式はありますか?前もって感謝します!

4

3 に答える 3

4

極座標を使用すると、次のように導き出すことができます。

最初に、デカルト座標の(x、y)が極座標の(r、t)であると次のように仮定します。

x = r * cos(t)
y = r * sin(t)

ここで、角度a(反時計回り)を回転させた後、(x'、y')を新しい点とします。

x' = r * cos(t + a)
y' = r * sin(t + a)

それらを拡張すると、次のようになります

x' = r * cos (t) * cos (a) - r * sin (t) * sin (a) 
y' = r * sin (t) * cos (a) + r * cos (t) * sin (a)

x' = x * cos (a) - y * sin (a)
y' = x * sin (a) + y * cos (a)

ここで、a = -thetaに置き換えます(時計回りにシータについて言及したため)。新しいポイントを取得します。

于 2012-12-28T18:18:01.630 に答える
1

このクラスには極座標を使用するか、三角法を推測します。

興味のある方法:

    /// <summary>
    /// Returns polar coordinate converted to 2-d cartesian coordinates.
    /// Coordinates are relative to 0,0 of the angle base vertex
    /// </summary>
    public Point Point
    {
      get
      {
        int x = (int)(m_R * Math.Cos(m_Theta));
        int y = (int)(m_R * Math.Sin(m_Theta));
        return new Point(x, y);
      }
    }

クラス全体:

  /* NFX by ITAdapter
   * Originated: 2006.01
   * Revision: NFX 0.2  2009.02.10
   */
  using System;
  using System.Collections.Generic;
  using System.Drawing;
  using System.Text;

  namespace NFX.Geometry
  {

    /// <summary>
    /// Represents a point with polar coordinates
    /// </summary>
    public struct PolarPoint
    {

      #region .ctor

        /// <summary>
        /// Initializes polar coordinates
        /// </summary>
        public PolarPoint(double r, double theta)
        {
          m_R = r;
          m_Theta = 0;
          Theta = theta;
        }

        /// <summary>
        /// Initializes polar coordinates from 2-d cartesian coordinates
        /// </summary>
        public PolarPoint(Point center, Point point)
        {
          this = CartesianUtils.PointToPolarPoint(center, point);
        }
      #endregion

      #region Private Fields 
        private double m_R;
        private double m_Theta;

      #endregion


      #region Properties
        /// <summary>
        /// R coordinate component which is coordinate distance from point of coordinates origin
        /// </summary>
        public double R
        {
          get { return m_R; }
          set { m_R = value; }
        }


        /// <summary>
        /// Angular azimuth coordinate component. An angle must be between 0 and 2Pi.
        /// Note: Due to screen Y coordinate going from top to bottom (in usual orientation)
        ///  Theta angle may be reversed, that is - be positive in the lower half coordinate plane.
        /// Please refer to:
        ///  http://en.wikipedia.org/wiki/Polar_coordinates
        /// </summary>
        public double Theta
        {
          get { return m_Theta; }
          set
          {
            if ((value < 0) || (value > Math.PI * 2))
              throw new NFXException("Invalid polar coordinates angle");
            m_Theta = value;
          }
        }


        /// <summary>
        /// Returns polar coordinate converted to 2-d cartesian coordinates.
        /// Coordinates are relative to 0,0 of the angle base vertex
        /// </summary>
        public Point Point
        {
          get
          {
            int x = (int)(m_R * Math.Cos(m_Theta));
            int y = (int)(m_R * Math.Sin(m_Theta));
            return new Point(x, y);
          }
        }
      #endregion



      #region Operators  
        public static bool operator ==(PolarPoint left, PolarPoint right)
        {
          return (left.m_R == right.m_R) && (left.m_Theta == right.m_Theta);
        }

        public static bool operator !=(PolarPoint left, PolarPoint right)
        {
          return (left.m_R != right.m_R) || (left.m_Theta != right.m_Theta);
        }
      #endregion


      #region Object overrides
        public override bool Equals(object obj)
        {
          if (obj is PolarPoint)
           return this==((PolarPoint)obj);
          else
           return false; 
        }

        public override int GetHashCode()
        {
          return m_R.GetHashCode() + m_Theta.GetHashCode();
        }

        public override string ToString()
        {
          return string.Format("Distance: {0}; Angle: {1} rad.", m_R, m_Theta);
        }


      #endregion

    }


  }
于 2012-12-28T18:08:16.153 に答える
0

デカルトから極座標式を使用します。

x = r * cos(theta)

y = r * sin(theta)

ラジアンを使用して、起点と終点の両方を解きます(始点のシータが欠落しており、終点のデルタシータがあります)。

次に、デカルトに変換し直します。

r ^ 2 = x ^ 2 + y ^ 2

r = sqrt(x ^ 2 + y ^ 2)

シータ=アークタン(y / x)

優れたリファレンスはhttp://tutorial.math.lamar.edu/Classes/CalcII/PolarCoordinates.aspxにあります。

于 2012-12-28T18:18:23.973 に答える