绘制直线,穿过

时间:2017-03-29 01:12:28

标签: php

我需要画一条从A点到C点的直线,它必须穿过两点之间的B点。

问题是我得到了A和B的坐标,而不是C.对于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”坐​​标? 感谢

1 个答案:

答案 0 :(得分:0)

这方面的数学相对简单。您可以按如下方式计算c的y值:

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

这通过将y值“扩展”与我们扩展x值的相同比率来起作用。我们知道向量a->ca->b的比率,因为我们有三个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值可以是任何东西。