2011-11-10 1 views
0

지금은 VB6에서이 일을하고 객체가 줄에서 만든 경로를 통해 갈 수 있도록하지만 난 그게 내가하지, 그것을 할 어떤 중요한 생각하지 않는다? 나는 그것이 수학과 관련이 있다고 믿습니다. 여기 수학/프로그래밍 : 어떻게

문제가

가,이 사진이 이미지에서 볼 수 있듯이

enter image description here

에서 봐, 검은 색 라인과 회색 원이있다. 어떻게 내가 할 수있는 지금

enter image description here

: 나는 바닥이 아래 왼쪽에서 오른쪽으로 원을 이동하려는, 그러나 나는 또한이 같은 우리의 두 번째 사진에 도달 그래서 라인의 경로를 따라 남고 싶어 이것을 성취합니까? 다시 VB6을 사용합니다.

+0

은 (http://stackoverflow.com/questions/8073590/vb6-how-to-use-a-line-as-a-path) 두 번 [같은 질문]를 게시하지 마십시오. – Deanna

답변

1

좋아, 나는 VBA6을 알고 있지만, 당신이 말한 이후로하지 않습니다

I don't think it matters what I do it in

내가 좌표는 원의 중심을 가진 포함하는 일반적인 솔루션를 제공하고, 선 종점.

이 줄

는 벡터로 취급 할 수 있습니다

(line.x2-line.x1, line.y2-line.y1) 

당신은 그냥 벡터 중임 프로그램이나 어떤이를 작성할 필요가 없습니다.

당신은 벡터의 크기를 얻을 수 있으며 변수에 할당 할 필요가 무엇 :

unitSize = sqrt((line.x2-line.x1)^2 + (line.y2-line.y1)^2) 
이제

단위 벡터의 구성 요소로 그것을 확인하고 별도의 구성 요소를 얻을 :

unitX = (line.x2-line.x1)/unitSize 
unitY = (line.y2-line.y1)/unitSize 

을 이제 서클을 업데이트하는 방법 :

do { 
    circle.x = circle.x + unitX * incrementSize //incrementSize scales how big the movement is assign it to whatever you seem fit. 
    circle.y = circle.y + unitY * incrementSize 
until (circle.x >= line.x2) //Or <= line.x2 depends which way you are going. 

잘하면이 도움이됩니다.

+0

좋아요, 당신이 나에게 말한 것을 구현했습니다. 이해합니다. 그것은 positve 라인 각도에 대해 작동하지만 주위에 다른 방식으로, 그것은 나를 때 부정적인 라인 unitSize 식별 오류가 발생합니다. 무엇이 해결책일까요? – Qasim

+0

@Qasim : 나는 지금은 모든 시간을 작동합니다 ... 내 크기 계산에 실수를했다. 나는 그걸 두려워했다. 아니, 그게 잘못이지만, 당신은 숫자를 얻을 수 있습니다. 여기서 오류의 라인 = :( – Dair

+0

SQRT와 NEG 번호 :'unitSize = SQR ((ShotLine (t) .X2 - ShotLine (t) .X1) + (ShotLine (t) .Y2 - ShotLine (t). Y2)) 잘못된 호출이나 절차가 있다고 말하면 방정식은 끝나지 않을 것입니다. 이것은 선의 각도가 반대 일 때마다 발생합니다. 무엇이 문제입니까? – Qasim

2

가 내 생각이 달성의 여러 가지 있지만, 여기 내 마음에 오는 첫 번째입니다. 몇 가지 가정을합니다. 선이 양의 방향으로 가고 0,0에서 시작한다는 것입니다. 이 중 하나라도 사실이 아니라면,이를 조정하기 위해 더 많은 코드를 작성해야합니다.

============================================== ===

Psuedocode: 
    'To track current coordinates of the center of the circle 
    dim x as float, y as float 
    x = 0: y = 0 

    'Coordinates for the line 
    dim x1 as float, y1 as float, x2 as float, y2 as float 
    x1=0: y1=0: x2=50: y2=75 

    'How much we're going to move the circle at a time 
    dim xStep as float, yStep as float, stepSize as float 
    stepSize = 100 
    xStep = x2/stepSize 
    yStep = y2/stepSize 

    Do 
     'Draw circle here with x, y for coordinates 
     x = x + xStep 
     y = y + yStep 
    Loop Until xStep > x2