我正在尝试理解这里列出的答案(下面复制/粘贴):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
答案 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);
希望这有帮助!