Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.107.90] |
|
Сообщ.
#1
,
|
|
|
Перевожу код с фортрана на дельфи , застрял на операторе ATAN. Както странно он работает по сравнению с его аналагом на дельфи.
на фортране SUBROUTINE CTL(UCF,U,RO,AL1,B2,FI,PSI,C1,W1,C2,W2B1,AL2,HO,POL) CF=U/UCF C1=FI*CF*SQRT(1-RO) CALL TRK(C1,U,AL1,C1U,W1,B1) W2=PSI*SQRT(W1**2+RO*CF**2) CALL TRK(W2,U,B2,W2U,C2,AL2) HO=(CF**2)/2. POL=U*(C1U+W2U-U)/HO RETURN END Subroutine TRK (C,U,A,CU,W,B) PI=3.141593 CU=C*COS(A) CA=C*SIN(A) UC=CU-U B1=ATAN(UC/CA) B=PI/2.-B1 W=SQRT(UC**2+CA**2) RETURN END на дельфи procedure TForm1.CTL(VAR UCF,U,RO,AL1,B2,FI,PSI,C1,W1,C2,W2,B1a,AL2,HO,POL:REAL); begin CF:=U/UCF ; C1:=FI*CF*SQRT(1-RO) ; TRK(C1,U,AL1,C1U,W1,B1a) ; W2:=PSI*SQRT(POWER(W1,2)+RO*POWER(CF,2)) ; TRK (W2,U,B2,W2U,C2,AL2) ; HO:=(POWER(CF,2))/2 ; POL:=U*(C1U+W2U-U)/HO ; end; procedure TForm1.TRK(VAR C,U,A,CU,W,B:REAL); begin CU:=C*COS(pi/(180/a)) ; CA:=C*SIN(pi/(180/a)) ; UC:=CU-U ; BTRK:=arctan(pi/(180/(UC/CA))) ; B:=PI/2.-BTRK ; W:=SQRT(POWER(UC,2)+POWER(CA,2)) ; end; данные исходные: ucf:=0.509 ; u:=135.9 ; b2:=20 ; fi:= 0.969 ; psi:= 0.943 ; ro:= 0.169 ; al1:= 12.9 ; должен получится вот такой ответ: с1=235 w1=107.5 b1=29,3 (не сходитcя из-за арктангенса ,получается 1,06 ) w2=144,9 al2=89,7 (тоже не сходится ,получается 0,0077) c2=49,6 pol=0,87 ho=35642 прошу помочь с не навистными арктангенсами |
Сообщ.
#2
,
|
|
|
Не понял. Ты угол что, в градусах задаешь, когда в Дельфи программу гоняешь? Почему понадобился перевод в радианы там, где в оригинале его не было?
|
Сообщ.
#3
,
|
|
|
Цитата volvo877 @ Не понял. Ты угол что, в градусах задаешь, когда в Дельфи программу гоняешь? Почему понадобился перевод в радианы там, где в оригинале его не было? Это уж не говоря о том, что и перевод в радианы (даже если он был бы зачем-то нужен) попросту выполнен неправильно. |
Сообщ.
#4
,
|
|
|
Цитата volvo877 @ Не понял. Ты угол что, в градусах задаешь, когда в Дельфи программу гоняешь? Почему понадобился перевод в радианы там, где в оригинале его не было? AL1,B2- даются в градусах Думаю здесь он точно нужен (без него весь ответ неправельный) CU:=C*COS(pi/(180/a)) ; CA:=C*SIN(pi/(180/a)) ; но я что-то явно делаю не так вот здесь BTRK:=arctan(pi/(180/(UC/CA))) ; B:=PI/2.-BTRK ; |
Сообщ.
#5
,
|
|
|
Цитата RealZ @ Значит, у тебя фортран считает неправильно. Если угол - в градусах, то SIND/COSD... А используются обычные SIN/COS... Неувязочка...AL1,B2- даются в градусах P.S. Для перевода градусы -> радианы есть Math.DegToRad, если что... |
Сообщ.
#6
,
|
|
|
Цитата volvo877 @ Цитата RealZ @ Значит, у тебя фортран считает неправильно. Если угол - в градусах, то SIND/COSD... А используются обычные SIN/COS... Неувязочка...AL1,B2- даются в градусах P.S. Для перевода градусы -> радианы есть Math.DegToRad, если что... спасибо это навело меня на мысли что надо сделать вот так : CU:=C*COS(Math.DegToRad(a)) ; CA:=C*SIN(Math.DegToRad(a)); UC:=CU-U ; BTRK:=Math.radtodeg(arctan(UC/CA)) ; и всё сошлось |