2

あるシェイプを別のシェイプから差し引いて、結果のシェイプを別のシェイプと結合したいと考えています。私の例では、正方形は半分に切り取られ、その切り取られたバージョンは右に半円だけ拡張されます。だから私は他のビアから1つの正方形を差し引き、重なっている領域がちょうどマージされると仮定して、円全体でdifferenceを作ります. union私は ({1,2,3,4} / {3,4}) U {2,3}等しい集合演算の観点から考えて{1,2,3}いますが、私の実装では等しいです{1,3}:

import Diagrams.Backend.SVG.CmdLine

{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE FlexibleContexts          #-}
{-# LANGUAGE TypeFamilies              #-}

import Diagrams.Prelude
import qualified Diagrams.TwoD.Path.Boolean as B

main = mainWith (combination # fc red # bgFrame 0.1 white)
  where
    combination :: QDiagram B V2 Double Any
    combination = strokePath plusCircle
    shorterSquare = B.difference Winding (square 2) (square 2 # translateX 1)

    plusCircle = B.union Winding (circle 1 <> shorterSquare)

しかし、私はこれを取得します:ここに画像の説明を入力 これは私が望むものではありません。半円を長方形とマージし、結果を赤で塗りつぶし、内部に線を入れないようにします。

4

2 に答える 2

1

私はダイアグラムの専門家ではありませんが、ストローク パスが表す形状ではなく、ストローク パスを組み合わせているようです。塗りつぶし規則には、重複するストローク パスに対してワインディング塗りつぶし規則がどのように動作するかについて興味深いことがいくつかあります。

代わりに、完成した図形を構成するために、 などの図の構成 の手法を使用することをお勧めします。atop

于 2019-05-23T00:24:16.020 に答える