#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, расстояние все равно будет работать.