C ++到PHP的翻译

时间:2014-01-23 04:32:07

标签: php c++

我正在尝试理解这里列出的答案(下面复制/粘贴):https://stackoverflow.com/a/3838294/1541165

问题在于它是用C ++编写的,我想在PHP中应用所描述的解决方案。

有人可以帮助解决一下翻译吗?就像A.x - B.x在PHP中的样子一样?

  第一步;移动原点。

     

x'= A.x - B.x.     y'= A.y - B.y

     

第二步,执行轮换

     

x''= x'* cos(C) - y'* sin(C)=(A.x-B.x)* cos(C) - (A.y-B.y)* sin(C)

     

y''= y'* cos(C)+ x'* sin(C)=(A.y-B.y)* cos(C)+(A.x-B.x)* sin(C)

     

第三步也是最后一步,移回坐标框

     

x'''= x''+ B.x =(A.x-B.x)* cos(C) - (A.y-B.y)* sin(C)+ B.x

     

y'''= y''+ B.y =(A.y-B.y)* cos(C)+(A.x-B.x)* sin(C)+ B.y

     

并且presto!我们有旋转公式。如果没有所有这些计算,我会把它给你:

     

将点A绕点B旋转角度C

     

A.x'=(A.x-B.x)* cos(C) - (A.y-B.y)* sin(C)+ B.x

     

A.y'=(A.y-B.y)* cos(C)+(A.x-B.x)* sin(C)+ B.y

1 个答案:

答案 0 :(得分:1)

A和B只是包含两个浮点数的C ++结构,为了在PHP中实现这一点,你需要创建一个简单的“Point”类:

class Point {
    public $X;
    public $Y;
    public function __construct($x = 0, $y = 0) {
        $this->X = $x;
        $this->Y = $y;
    }
}

有了这个课程,你可以像这样创建A点和B点:

$A = new Point(0, 1);
$B = new Point(1, 0);

使用这两个点,并以弧度为单位旋转角度$ C:

$C = 3.14;

// The long way
$x1 = $A->X - $B->X;
$y1 = $A->Y - $B->Y;

$sinC = sin($C);
$cosC = cos($C);

$x2 = $x1 * $cosC - $y1 * $sinC;
$y2 = $y1 * $cosC + $x1 * $sinC;

$resultX = $x2 + $B->X;
$resultY = $y2 + $B->Y;

// The quick way
$sinC = sin($C);
$cosC = cos($C);

$diff = new Point($A->X - $B->X, $A->Y - $B->Y);
$result = new Point($diff->X * $cosC - $diff->Y * $sinC + $B->X, 
                    $diff->Y * $cosC + $diff->X * $sinC + $B->Y);

希望这有帮助!