0

キャンバスに線を引きたい。したがって、ユーザーからの 2 回のクリックを使用して、開始点Sと終了点を定義しますE

ctx.moveTo(sx, sy);
ctx.lineTo(ex, ey);

さらに、線の両側で静的オフセットを減算したいです。たとえば、static int offset = 10; 私の問題は、オフセットを加算または減算する必要がある方向 (北、東、南、西) をどのように知ることができますか?

線が上から下に行く場合は、(0, +10)始点 S と終点に適用する必要があります(0, -10)。線が座標空間を斜めに通過すると、さらに複雑になります。

おそらくそれは「単純な」数学的問題かもしれませんが、解決策を見つけるための適切なキーワードがありません。

4

1 に答える 1

0

基本的な数学を使用する必要があります。

  1. x と y の変位を求める
  2. 角度シータを見つける
  3. 変位ベクトルを作成する
  4. あなたのポイントからこれを追加または取得します

これが機能しない場合はお知らせください。

int offset = 10;

int[] point1 = {15, 25}; //start point
int[] point2 = {42, 37}; //end point

int xDisplacement = point2[0] - point1[0];
int yDisplacement = point2[1] - point1[1];

double theta = Math.toDegrees(Math.atan2(yDisplacement, xDisplacement));        

double[] diplacementVector = {offset*Math.cos(theta), offset*Math.sin(theta)};

point1[0] += diplacementVector[0];
point1[1] += diplacementVector[1];

point2[0] -= diplacementVector[0];
point2[1] -= diplacementVector[1];
于 2013-03-24T01:31:54.013 に答える