Python vs Modula-2

(9) 南はどっちだ?

To Workbench Python (JP)    

<Task>

名探偵コナンは「南はどっちだ?。太陽は出ている。腕時計もある」といいます。 彼は短針を太陽に向け、それと12時との二等分線をみつけます(conancompass.html)。

太陽の位置 P(ψ,φ) は既に求まっているのでここでは時刻(hour)の情報を挿入します(00分専用となります)。

<太陽の方角 >

午後2時丁度であれば、南は短針と12時の二等分線(1時)の方角だとコナン君はいうでしょう。

Added code
<Python>

Class getPsiPhi への追加コード

    onClockPsi = np.zeros((NjustH+1,Nphis))
    onClockPhi = np.zeros((NjustH+1,Nphis))    
    Nclock  = np.arange(NjustH+1,dtype='i')
    for ji in range(NjustH):
        Nclock[ji] = 0 
    while(True):
        for j in range(Nphis):
            if j % justHdiv == 0:
                ji = j // justHdiv
                if (ji<2*NjustH):
                    onClockPsi[ji,ii] = psd
                    onClockPhi[ji,ii] = phd
                    Nclock[ji] += 1 

Plotting code

def plotClockHr(Nclock):
    for j in range(NjustH):
        x = []
        y = []
        m=Nclock[j]
        if isHalf:
            m = m // 2
        print("j=",j,"Nclock=",m)
        for k in range(m):
            if onClockPhi[j,k]>0:
                x.append(onClockPsi[j,k])
                y.append(onClockPhi[j,k])
    
        if isHalf:
            plt.plot(x, y, color="black", lw=1)
        else:
            plt.plot(x, y, color="blue",lw=1)
<XDS Modula-2>

日にちのループへの追加コード

    LOOP      (* to scan days *)
	    IF (j MOD justHdiv = 0) THEN
	      ji:= j DIV justHdiv;
	      onClock[ji,ii].psid:= psid;
	      onClock[ji,ii].phid:= phid;
	      INC(Nclock[ji]);
	      (*INC(ji);*)
	    END;

Plotting code

 PROCEDURE plotClock();
  CONST
    Size2 = 3;
  VAR
    j,k,n: INTEGER;
  BEGIN
    FOR j:=0 TO 23 DO
      IF isFullclkset THEN n:= Nclock[j]; ELSE n:= Nclock[j] DIV 2; END;
      FOR k:=0 TO n-1 DO
        X[k]:= onClock[j,k].psid;
        Y[k]:= onClock[j,k].phid;
      END;
      IF isOnlyMk THEN
        polylinelong(X, Y, n, 0, 3, Size2, -1, 0);
      ELSE	
        sepPolyline(X, Y, n, 0, dotseparn);
      END;	
    END;
  END plotClock;
結果
<Python>

<Modula-2>

CorelDrawで編集済。○は二等分線の方角。「名探偵コナン」を題材により。

3-12-2025, S. Hayashi