2011-11-10 2 views
1

이 주제에 대한 다른 질문이 있습니다. 위키 피 디아 및 다른 기사와 함께 대부분 읽었을 것으로 생각되지만 일부 간단한 산술 내 좌표 계산을 완료하십시오.스크린상의 좌표 계산

이 코드는 다음과 같습니다.

 
typedef struct { 
    double startX; 
    double startY; 
    double x2; 
    double y2; 
    double length; 
    double angle; 
    double lastAngle; 
} LINE; 
void lineCalc(LINE *lp) { 
    double radians = lp->angle * 3.141592653589793/180.0; 
    lp->x2 = lp->startX + (lp->length * cos(radians)); 
    lp->y2 = lp->startY + (lp->length * sin(radians)); 
    fprintf (stderr, "lineCalc:startX:%2.3f, startY:%2.3f, length:%2.3g, angle:%2.3f, cos(%2.3f):%2.3f, x2:%2.3f, y2:%2.3f\n", lp->startX, lp->startY, lp->length, lp->angle, lp->angle, cos(radians), lp->x2, lp->y2); 
} 
int main() { 
    // Initialise to origin of 250, 250. 0, 0 for initial end point. Length 150, first angle 60 (degrees), l.lastAngle currently not used 
    LINE l = {250, 250, 0, 0, 150, 60, 0}; 
    lineCalc(&l); 
    //drawLine(&l); 
    l.startX = x2; l.startY = y2; // make last end point, new start point. Angle stays at 60 degrees 
    lineCalc(&l); 
    //drawLine(&l); 
    l.startX = x2; l.startY = y2; 
    lineCalc(&l); 
    //drawLine(&l); 
} 
시작점, 길이 및 각도가 지정된 줄의 끝점을 계산합니다. 모두 좋고 좋지만, 할 수 있기를 원하는 것은 모양을 그리는 것입니다. 삼각형이 시작일 것입니다. 코드는 다음 라인 등을 그릴, 계산, (실제로는 SVG를 생성하는) 선을 그어야, 계산을 마지막 끝점을 다음 원산지를 만들 것입니다 순간

...

내가 빠뜨린 가장 중요한 점은 그려지는 마지막 선에 비례하여 각도를 얻는 방법이다. 이때 원점의 이동은 정상적으로 작동하지만 각도는 동일하게 유지되므로 각도가 마지막 선과 관련되지 않고 시작과 관련되기 때문에 각도가 60 도인 세 개의 선은 직선을 그립니다.

관련성이있는 경우 SVG 가로가 0도입니다. 따라서 y100에서 시작하는 50 단위 길이의 선, 90도 각도의 x100은 종점이 y150, x100입니다.

누군가가 분명한 점을 지적하여 마지막 줄에 상대적으로 정확한 각도를 만들 수 있습니까?

답변

1

당신이 첫 번째 줄은 세타로 그려되는 각도를 가지고가는 경우 :

세타 + 180 또는 세타 - 180 다시 방금 그린 선 아래로 당신을 직면하게 될 것이다.

그런 다음 theta + 180 deg + 60 OR theta - 180 deg + 60은 첫 번째 줄까지 60도에서 마주 보게됩니다.

svg에서 사용하는 각도 범위 (180도 또는 0에서 360도)와 180 도의 시작도가 얼마나 큰지 선택해야합니다. 또한 두 번째 선을 그릴 첫 번째 선의 측면을 기준으로 + 또는 - 60도를 선택해야합니다.

두 번째 선 (예 : theta + 180 + 60)을 그리는 각도를 계산했으면 세 번째 선의 각도를 계산하기 위해 다음 세타로 가져와야합니다.

+0

신속하고 정확한 답변을 보내 주셔서 감사합니다. 이제 임의의 각도와 다른 모양 (또는 적어도 시도한 몇 가지 모양)에서 작동합니다. – blankabout