|
Программирование >> Программирование с использованием ajax
public Vector(double? г, double? theta) { Нормализация. if (r < 0) r = -r; theta += 180; theta = theta % 360; Установка полей. R = r; Theta = theta; public static Vector operator +(Vector opl. Vector op2) { try { Получение координат (x, у) для нового вектора. double newX = opl.R.Value * Math.Sin(opl.ThetaRadians.Value) + op2.R.Value * Math. Sin(op2.ThetaRadians.Value); double newY = opl.R.Value * Math.Cos(opl.ThetaRadians.Value) + op2.R.Value * Math.Cos(op2.ThetaRadians.Value); Выполнение преобразования в (г, theta). double newR = Math. Sqrt (newX * newX + newY * newY) ; double newTheta = Math.Atan2(newX, newY) * 180.0 / Math.PI; Возврат результата. return new Vector (newR, newTheta); catch { Возврат нулевого вектора, return new Vector (null, null); public static Vector operator -(Vector opl) { return new Vector(-opl.R, opl.Theta); public static Vector operator -(Vector opl. Vector op2) { return opl + (-op2); public override string ToString () { Получение строкового представления координат. string rString = R.HasValue ? R.ToString () : null ; string thetaString = Theta.HasValue ? Theta.ToString() : null ; Возврап строки (г, theta). return string.Format ( ({0}, {1}) , rString, thetaString); 4. Измените код в файле Program, cs, как показано ниже: class Program { static void Main(string [ ] args) { Vector vl = GetVector( vectorl ) ; Vector v2 = GetVector( vectorl ) ; Console.WriteLine( {0} + {1} = {2} , vl, v2, vl + v2) ; Console.WriteLine( {0} - {1} = {2} , vl, v2, vl - v2); Console.ReadKey0 ; static Vector GetVector(string name) { Console.WriteLine( Input {0} magnitude: , name); Ввод модуля вектора double? г = GetNullableDoubleO; Console.WriteLine( Input {0} angle (in degrees): , name); Ввод угла вектора (в градусах) double? theta = GetNullableDoubleO; return new Vector (r, theta); static double? GetNullableDoubleO { double? result; string userlnput = Console.ReadLine (); result = double.Parse(userlnput); catch { result = null; return result; 5. Запустите приложение и введите значения модуля и угла для двух векторов. На рис. 12.1 показан пример результата, который должен получиться. I fll J C./BegVCSh nVChapt*r12rCM2Ex01/Ch12Ex01/b n/DebugX:h12€x01.bX£ Рис. 12.1. Приложение Chi2Ех01 в действии 6. Запустите приложение снова, но на этот раз пропустите ввод какого-то из четырех требуемых значений. На рис. 12.2 показан пример результата, который может получиться в таком случае. I fik ч: BeflVCSharpK;har12/Ch1Kx01CM2LK01/b rvT)eboo:M2EK01.EXE Рис. 12.3. Векторе полярными координатами Рис. 12.2. Пропуск ввода одного ш значений в приложении Chl2Ex01 Описание полученных результатов в этом примере создавался класс по имени Vector, представляющий вектор с полярными координатами (модулем и углом), как показано на рис. 12.3. Координаты ги О представлены в коде общедоступными полями R и Theta, причем значение поля Theta выражается в градусах. Для получения значения Theta в радианах предоставляется ThetaRad, а необходимо это потому, что в классе Math в его статических методах используются радианы. И R, и Theta являются значениями типа double?, а это значит, что они могут быть равны null: public class Vector { public double? R = null; public double? Theta = null; public double? ThetaRadians { get { Преобразование градусов в радианы, return (Theta * Math.PI / 180.0); Конструктор класса Vector сначала нормализует первоначальные значения R и Theta, а затем устанавливает соответствующие общедоступные поля: public Vector(double? г, double? theta) { Нормализация. if (г < 0) г = -г; theta += 180; theta = theta % 360; Установка полей. R = г; Theta = theta;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |