このトピックに関する他の質問がたくさんあることは知っていますが、私はWikipediaや他の記事と共に大部分を読んだと思いますが、私の座標計算を完了します。画面上の座標を計算する
私はこのコードを持っています:
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度の3本の線は、最後の線に対して相対的な角度ではなく、直線を描きます。
SVGを水平にした場合の関連性はゼロ度です。したがって、y100から始まる50単位の長さの線、90度の角度のx100は、y150、x100の終点を有する。
誰かが最後の行に相対的な角度を正確にするために私が紛失しているという明白なことを指摘できますか?
迅速で正確な対応をありがとう。これは現在、任意の角度や他の形(または私が試した数少ないもの)で動作します。 – blankabout