|
> No.3830[元記事へ]
島村1243さんへのお返事です。
> <条件>
> 6)cos(θ(i))=(x(i)-A)/R=C(i)/Q1-Q2/Q1*cos(ANGLE(x(i)-B,y(i)))を満たす。
i=1のとき、Δで調整できないので、これを満たさないと思います。
このi=1の上記の条件を除いて、N=2ときはすべてが満たすと思います。
プログラムは、
0≦θ[1]≦θ[2]≦ … ≦θ[n]とする。
2π=θ[1]+θ[2]+ … +θ[n]≧nθ[1]より、2π/n≧θ[1]
2π-θ[1]=θ[2]+ … +θ[n]≧(n-1)θ[2]より、(2π-θ[1])/(n-1)≧θ[2]
2π-(θ[1]+θ[2])=θ[3]+ … +θ[n]≧(n-2)θ[3]より、(2π-(θ[1]+θ[2]))/(n-2)≧θ[3]
:
:
として、不定方程式を解く。
th[i]を0.25°ずつ変化させて、x[i],y[i]を求めて、
そのときの各Δ[i]で、Δ[2]≒Δ[3]≒ … ≒Δ[N]となるものを探し出す。
PUBLIC NUMERIC x(100),y(100)
PUBLIC NUMERIC N, A,B,R,Q1,Q2
LET N=3 !2以上
LET A=5 !既知定数
LET B=1
LET R=2
LET Q1=2
LET Q2=3
DIM th(N) !θ[i]
FOR t=0 TO 360/N STEP 0.25 !※調整が必要である
LET th(1)=t
LET x(1)=A+R*COS(RAD(t))
LET y(1)= R*SIN(RAD(t))
!!IF ABS( Q1*(x(1)-A)+R*Q2*COS(ANGLE(x(1)-B,y(1))) )<1E-4 THEN !※調整が必要である
CALL try(2,360-t, th)
!!END IF
NEXT t
END
EXTERNAL SUB try(i,s, th()) !2π=θ[1]+θ[2]+ … +θ[n]
IF i=N THEN
LET th(N)=s
LET x(N)=A+R*COS(RAD(s))
LET y(N)= R*SIN(RAD(s))
LET d2=( Q1*COS(RAD(th(2)))+Q2*COS(ANGLE(x(2)-B,y(2))) )/(2-1)
LET d=( Q1*COS(RAD(s))+Q2*COS(ANGLE(x(N)-B,y(N))) )/(N-1)
IF ABS(d-d2)<1E-4 THEN !※調整が必要である
PRINT "Δ=";d2 !解を表示する
FOR K=1 TO N
PRINT K;th(K);x(K);y(K)
NEXT K
PRINT
END IF
ELSE
FOR t=th(i-1) TO s/(N-i+1) STEP 0.25 !※調整が必要である
LET th(i)=t
LET x(i)=A+R*COS(RAD(t))
LET y(i)= R*SIN(RAD(t))
IF i>2 THEN
LET OK=0
LET d2=( Q1*COS(RAD(th(2)))+Q2*COS(ANGLE(x(2)-B,y(2))) )/(2-1)
LET d=( Q1*COS(RAD(t))+Q2*COS(ANGLE(x(i)-B,y(i))) )/(i-1)
IF ABS(d-d2)<1E-4 THEN LET OK=1 !※調整が必要である
ELSE
LET OK=1
END IF
IF OK<>0 THEN CALL try(i+1,s-t, th)
NEXT t
END IF
END SUB
|
|