Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Smalltalk 循环遍历圆变形的直径_Smalltalk_Pharo_Morphic - Fatal编程技术网

Smalltalk 循环遍历圆变形的直径

Smalltalk 循环遍历圆变形的直径,smalltalk,pharo,morphic,Smalltalk,Pharo,Morphic,我有一个CircleMorph,我想扩大它的直径,可能用它来创建一个小动画 b := CircleMorph new. b color: Color transparent. b borderWidth: 2. b extent:100 @ 100. b openInWorld. 如果我使用循环或step方法来执行此操作,是否会很好?如果您推荐步骤方法,那么我该怎么做 您可以创建名为GrowingCircleMorph的CircleMorph的子类。 然后执行步骤: step self

我有一个
CircleMorph
,我想扩大它的直径,可能用它来创建一个小动画

b := CircleMorph new.
b color: Color transparent.
b borderWidth: 2.
b extent:100 @ 100.
b openInWorld.

如果我使用循环或
step
方法来执行此操作,是否会很好?如果您推荐
步骤
方法,那么我该怎么做

您可以创建名为
GrowingCircleMorph
CircleMorph
的子类。 然后执行
步骤

step
   self extent: (self extent) + 1.
   (self extent) > (200@200) ifTrue: [ self stopStepping ]
现在,如果你在世界上打开一个新成长圈的实例,它将开始成长为201@201.

要更改速度,请执行
stepTime
,并以毫秒为单位返回所需的两个步骤之间的时间

更新:如果希望中心保持不变,请更改圆变形的边界,而不是范围:

step
   self bounds: ((self bounds) expandBy: 1).
   (self extent) > (200@200) ifTrue: [ self stopStepping ]

如果您想从这些事情中获得乐趣,请将其设置为通用:

HOCanvasMorph>>drawOn: aCanvas
    super drawOn: aCanvas.

    drawBlock ifNotNil: [
      aCanvas
        translateBy: self bounds origin
        clippingTo: self bounds
        during: [:canvas | drawBlock value: canvas]]

    HOCanvasMorph>>drawBlock: aBlock
        drawBlock := aBlock.
        self changed.

HOCanvasMorph class>>example
|m|

m := HOCanvasMorph new openInWorld.

"to draw:"

m drawBlock: [:c |
    c line: 10@10 to: 100@100 color: Color red
]

HOCanvasMorph class>>napperons
"Some mathematical fun"

| m |
m := HOCanvasMorph new openInWorld. "to draw:"
m
    drawBlock: [ :aCanvas | 
        | n r t xa xc xb yc ya yb longueur nombreDeDroites |
        longueur := 150.
        nombreDeDroites := 30.  "super drawOn: aCanvas."
        xc := 200.
        yc := 200.
        n := 15.
        r := 100.
        0 to: n - 2 do: [ :i | 
            t := 2 * Float pi * i / n.
            i + 1 to: n - 1 do: [ :j | 
                | tj |
                tj := 2 * Float pi * j / n.
                xa := xc + (r * t cos).
                ya := yc + (r * t sin).
                xb := xc + (r * tj cos).
                yb := yc + (r * tj sin).
                (aCanvas asBalloonCanvas) line: xa @ ya to: xb @ yb color: Color green ] ] ]

由于块可以使用任何更改,请将这些更改放在步骤方法中。

感谢这一帮助,我有两个圆圈形状b1和b2相交。我可以使用相交方法获得相交点吗?b1:我认为你必须自己实施。看看数学公式,或者如果我没记错的话,有一些圆知道如何回答它们的交点。你可能会在那里找到一些灵感。如果你想让中心保持不变,改变变形的边界,而不是范围。我更新了答案。