перевод базовой программы; застрял на ^(-1 / 2) и ^(3/2)

#basic

#Базовые модели

Вопрос:

Я пытаюсь перевести БАЗОВУЮ программу. Прошло много десятилетий с тех пор, как я занимался каким-либо базовым программированием. 🙂

У меня проблема с двумя строками кода:

360 D=D ((X(I)-X(J))^2 (Y(I)-Y(J))^2 (Z(I)-Z(J))^2)^(-1/2)

510 F=((X(I)-X(J))^2 (Y(I)-Y(J))^2 (Z(I)-Z(J))^2)^(3/2)

x(i) и т.д. формируют (x,y,z) координаты; таким образом, строка 360 — это, я думаю, вычисление расстояния между 2 точками; это сработало бы, если ^(-1/2) = квадратный корень.

Строка 510 очень похожа, но ^(3/2) ставит меня в тупик. Разумно ли возводить число в степень 1.5?

Я помню, что это ^2 означает квадрат (он же возведение в степень 2). Итак, может кто-нибудь, пожалуйста, сказать мне, что ^(-1/2) и ^(3/2) означают в BASIC!?

Спасибо за вашу помощь. Стив.

Комментарии:

1. Я ничего не знаю об этой программе, кроме строк, приведенных в OP, и предположения, что ей несколько десятилетий, но уже из этого я знаю, что это потрясающая программа. Я могу представить свою версию 1980-х годов, сгорбившуюся над C64, выводящую подобные строки, чтобы заставить игровой спрайт двигаться по непредсказуемому пути, и чувствующую себя очень самодовольной, когда это сработало.

Ответ №1:

Разумно ли возводить число в степень 1.5?

ДА. Существует обычный арифметический смысл возведения любого числа в любую степень. В этом случае это эквивалентно преобразованию в куб с последующим извлечением квадратного корня (или с извлечением квадратного корня с последующим преобразованием в куб, поскольку умножение является коммутативным).

^(-1/2) = квадратный корень.

Не совсем. Возведение числа в отрицательную степень эквивалентно нахождению обратной величины от возведения его в положительную степень, так что это операция «1, деленная на квадратный корень X»

Ответ №2:

В BASIC верно следующее:

 360 D = D   ((X(I) - X(J)) ^ 2   (Y(I) - Y(J)) ^ 2   (Z(I) - Z(J)) ^ 2) ^ (-1 / 2)
361 D = D   1 / SQR((X(I) - X(J)) ^ 2   (Y(I) - Y(J)) ^ 2   (Z(I) - Z(J)) ^ 2)

510 F = ((X(I) - X(J)) ^ 2   (Y(I) - Y(J)) ^ 2   (Z(I) - Z(J)) ^ 2) ^ (3 / 2)
511 F = SQR(((X(I) - X(J)) ^ 2   (Y(I) - Y(J)) ^ 2   (Z(I) - Z(J)) ^ 2) ^ 3)
  

Комментарии:

1. Спасибо! В чем значение -1 в ^ (-1 / 2) ; также sqr(...) совпадает с (...) ^2 ?

2. Так получилось, что это две пары (эквивалентных) назначений. Императивные языки плохо описывают эквивалентности

3. SQR (x) совпадает с X ^ (1/2)

4. Оператор x = x ^ -1 такой же, как x = 1 / x

5. Попался! 🙂 итак, мои строки не вычисляют расстояние! И может быть записан как: dx = x(i)-x(j) <nl> dy = y(i)-y(j) <nl> dz = z(i)-z(j) <nl> D = D 1 / sqr( dx^2 dy^2 dz^2 ) <nl> F = sqr( (dx^2 dy^2 dz^2 ) ^ 3) Извините за <nl> вставки, но я не думаю, что смогу отображать новые строки в комментариях. Большое спасибо eoredson!

Ответ №3:

Эти функции должны выдавать массивы равных значений:

 DIM x(10) AS INTEGER, y(10) AS INTEGER, z(10) AS INTEGER
FOR x = 1 TO 10
    x(x) = x: y(x) = x: z(x) = x
NEXT
I = INT(RND * 10   1): J = INT(RND * 10   1)

D1 = ((x(I) - x(J)) ^ 2   (y(I) - y(J)) ^ 2   (z(I) - z(J)) ^ 2) ^ (-1 / 2)
D2 = 1 / SQR((x(I) - x(J)) ^ 2   (y(I) - y(J)) ^ 2   (z(I) - z(J)) ^ 2)

F1 = ((x(I) - x(J)) ^ 2   (y(I) - y(J)) ^ 2   (z(I) - z(J)) ^ 2) ^ (3 / 2)
F2 = SQR(((x(I) - x(J)) ^ 2   (y(I) - y(J)) ^ 2   (z(I) - z(J)) ^ 2) ^ 3)

IF D1 = D2 THEN PRINT "values equal to:"; D1
IF F1 = F2 THEN PRINT "values equal to:"; F1
END
  

Ответ №4:

Трехмерные системы координат от Google:

 The distance formula states that the distance between two points in xyz-space is 
the square root of the sum of the squares of the differences between corresponding 
coordinates. That is, given P1 = (x1,y1,z1) and P2 = (x2,y2,z2), the distance 
between P1 and P2 is given by d(P1,P2) = sqr((x2-x1)^2   (y2-y1)^2   (z2-z1)^2)
  

Итак, по-видимому, вы можете получить расстояние между двумя точками xyz..

Комментарии:

1. Насколько я могу судить, если вы добавили 4-е измерение, такое как W, расстояние все равно будет работать.