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

Я пытаюсь перевести программу 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 - это, я думаю, расчет расстояния между двумя точками; это будет работать, если ^(-1/2) = квадратный корень.

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

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

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

Ответы [ 4 ]

3 голосов
/ 19 марта 2019

Разумно ли поднять число до степени 1,5?

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

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

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

0 голосов
/ 09 апреля 2019

Трехмерные системы координат от 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)

Таким образом, по-видимому, вы можете получить расстояние между 2 точками XYZ ..

0 голосов
/ 07 апреля 2019

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

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
0 голосов
/ 20 марта 2019

В бейсике верно следующее:

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)
...