0

円 c1 が完全に別の円 c2 の内側にあることを確認する数学的手順を実装しようとしています。

次のように動作するはずです。

与えられた c1(x, y, r) と c2(x, y, r) と c2.r>c1.r

  • c1 が c2 内にある場合は true を返す
  • c1 に適用する最小補正であるベクトル V(x,y) を返すため、c2 内にあります。

あなたにはどのように見えますか?数学者や物理学者にとっては簡単なはずですが、私にはかなり難しいです。

私は既に lua で実装を試みましたが、間違いなく何か問題があります。

local function newVector(P1, P2)
    local w, h=(P2.x-P1.x), (P2.y-P1.y)
    local M=math.sqrt(w^2 + h^2)
    local alpha=math.atan(h/w)
    return {m=M, alpha=alpha}
end

local function isWithin(C1, C2)
    local V12=newVector(C1, C2)
    local R12=C2.r-C1.r
    local deltaR=R12-V12.m
    if deltaR>=0 then
        return true
    else
        local correctionM=(V12.m+deltaR)    --module value to correct
        local a=V12.alpha
        print("correction angle: "..math.deg(a))
        local correctionX=correctionM*math.cos(a)
        local correctionY=correctionM*math.sin(a)
        return {x=correctionX, y=correctionY}
    end
end

ありがとう!

4

2 に答える 2