Программирование >>  Программирование с использованием ajax 

1 ... 106 107 108 [ 109 ] 110 111 112 ... 396


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;



1 ... 106 107 108 [ 109 ] 110 111 112 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика