[SML 7298] はじめまして & Jun に関して質問

shortsleeved shortsleeved @ mac.com
2007年 4月 18日 (水) 22:11:03 JST


はじめまして、佐藤と申します。

最近、Jun for Smalltalk のコードを勉強させていただいていま 
す。
早速ですが、ひとつ質問があります。
Jun740で、以下を do it すると、無限ループしてしまうように 
みえます。

----
JunPlane on: 0 , 1 , 1 vertical: (0 , 0 , 0 to: -1 , 0 , 0)
----

コードを追っていくと、#on:vertical: メソッド中の p3  
を再計算しいる以下の部分、

-----
     p3 := thePoint.
     ((p1 to: p2) isParallelWithLine: (p1 to: p3))
         ifTrue:
             [thirdLine := firstLine.
             threeAxes := Array
                         with: (0 , 0 , 0 to: 0 , 0 , 1)
                         with: (0 , 0 , 0 to: 1 , 0 , 0)
                         with: (0 , 0 , 0 to: 0 , 1 , 0).
             thirdAxis := threeAxes
                         detect: [:line | (line to = firstAxis to)  
not and: [(line to = secondAxis to) not]].
             aTransformation := Jun3dTransformation translate:  
thirdAxis to.
             thePoint := nil.
             [thePoint isNil or: [thePoint equal: p2]] whileTrue:
                     [thirdLine := thirdLine transform: aTransformation.
                     thePoint := aPlane intersectingPointWithLine:  
thirdLine].
             p3 := thePoint].
-----

が、おかしいように思われました。文章ではうまく説明しにくいのです 
が、ここで、thirdAxis を求める必要はなく、最初の p3  
の計算時とは違う方向に移動させれば良いだけだと判断し、上記部分を 
以下のように書き換えてみました。

-----
     p3 := thePoint.
     ((p1 to: p2) isParallelWithLine: (p1 to: p3))
         ifTrue:
             [thirdLine := firstLine.
             aTransformation := Jun3dTransformation translate:  
firstAxis to.
             thePoint := nil.
             [thePoint isNil or: [thePoint equal: p2]] whileTrue:
                     [thirdLine := thirdLine transform: aTransformation.
                     thePoint := aPlane intersectingPointWithLine:  
thirdLine].
             p3 := thePoint].
-----

このようにすると、無限ループしなくなったのですが、ここで質問があ 
ります。
この修正は、今回のケース "JunPlane on: 0 , 1 , 1 vertical: (0 ,  
0 , 0 to: -1 , 0 , 0)" でたまたまうまくいっただけなのでしょう 
か、それとも、あらゆるケースで通用するものなのでしょうか。
どなたかご回答いただければ幸いです。

以上、よろしくお願いします。



--
shortsleeved @ mac.com



-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://www.akademia.co.jp/pipermail/sml/attachments/20070418/7c3fefbc/attachment.html


SML メーリングリストの案内