2017-03-29 16 views
1

点Aから点Cまでの直線を描画する必要があります。点Bを通過する必要があります。間にある点を通る直線を描く

問題は、私はCではなく、ちょうどAとBの座標を得ているということです。点Cに対しては、私は "x"座標しか持っていません。

その私がAからBに線を引く必要があり、かつC.

<?php 
$im = imagecreate(600, 600); 
$background= imagecolorallocate($im, 25, 25, 75); 
imagefill($im, 0,0, $background); 
$white= imagecolorallocate($im, 255, 255, 255); 

$a= array(100, 200); 
$b= array(200, 176); 
$c= array(300, ''); // This is to be calculated 

imageline($im, $a[0], $a[1], $c[0], $c[1], $white); 

header("Content-Type: image/jpeg"); imagejpeg($im); exit(); 
?> 

にそれを拡張するように直線は、Aから始まりBに触れ、およびCで終了する必要があります...どのように私はポイントCの "y"のcoordを計算するのですか? ありがとう

答えて

0

これの計算は比較的簡単です。次のようにcのy値を計算することができます。

cy = ay + (by - ay) * (cx - ax)/(bx - ax) 

これは、我々はx値を拡張してきたように同じ比率でy値を「拡張」することによって動作します。我々を知っているベクトルa->ca->bの比率は、すべて3つのxの値を持っているためです。その同じ比率をyの値に適用するだけです。あなたの与えられたデータについては

、それはです:ラインが垂直である場合、これは動作しません

      ______________________ 
         /This is the ratio \ 
         |      | 
cy = ay + (by - ay) * (cx - ax)/(bx - ax) 
    = 200 + (176 - 200) * (300 - 100)/(300 - 200) 
    = 200 + -24  * 200 / 100 
    =     152 

注こと(ab共有し、同じx値)それはゼロ除算になり以来。これは修正可能ではありません。つまり、cは同じx値を持つ必要があり、したがってそのy値はです。

+0

OMG!すばらしい。どうもありがとうございます :) –

関連する問題