あるシェイプを別のシェイプから差し引いて、結果のシェイプを別のシェイプと結合したいと考えています。私の例では、正方形は半分に切り取られ、その切り取られたバージョンは右に半円だけ拡張されます。だから私は他のビアから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)
しかし、私はこれを取得します:
これは私が望むものではありません。半円を長方形とマージし、結果を赤で塗りつぶし、内部に線を入れないようにします。