원 c1이 다른 원 c2 안에 완전히 있도록 수학적 절차를 구현하려고합니다.기능은 원과 교정 내에서 원입니까?
그것은 다음과 같은 방식으로 작동한다 :
주어 C1 (X, Y, R) 및 (C2) (X, Y, R) 및 경우 c2.r> c1.r
- 참을 리턴 c1이 c2 내부에 있음
- 벡터를 반환하여 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
고마워요!
아마도 'math.atan2'를 사용해야합니다. – lhf
어떤 종류의 수정을 의미합니까? 센터 번역? 반경의 척도? 양자 모두? – lhf
나는 원 1의 번역을 의미하므로 C1에 반환 된 벡터 V (x, y)를 더하면 C1이 C2 안에있게됩니다. 예를 들어 C1이 2 픽셀 오른쪽 및 1 픽셀 아래로 C2를 벗어난 경우 반환 값은 {x = -2, y = -1}이어야합니다. – nest