我获得了线PQ和边界。我必须找到给定线的两条平行线,但线应该与边界相交。我也知道给定线的平行线之间的距离。我需要找到P'Q'和P“Q”。 请任何人给出一个简单的解决方案。
float vx = x2 - x1;
float vy = y2 - y1;
float mag = sqrt(vx * vx + vy * vy);
float t = (mag / 2.0) / mag;
float px = (1 - t) * x1 + t * x2;
float py = (1 - t) * y1 + t * y2;
我刚刚通过上面的代码找到了PQ的中心点。此外,我计划通过已知距离绘制垂直线(px,py),然后绘制垂直于该新线的线(这些线将与PQ平行),直到该新线的端点。但我无法实现它。任何人都可以帮助我或建议我一个懂数学的方法
答案 0 :(得分:0)
最后我得到了解决方案。 步骤是。 首先,我得到了PQ的中心点。
POINT find_a_point_in_distance(float x1, float y1, float x2, float y2, float len = 0) {
float vx = x2 - x1;
float vy = y2 - y1;
float mag = sqrt(vx * vx + vy * vy);
float t = len == 0 ? ((mag / 2.0) / mag) : (len / mag);
float px = (1 - t) * x1 + t * x2;
float py = (1 - t) * y1 + t * y2;
POINT res = { px, py };
return res;
}
这里(px,py)是PQ的中心点。 然后我找到垂直线(px,py)。 我已经在问题中提到我知道PQ和P'Q'之间的距离也是PQ和P“Q”。所以我使用那个距离在垂直线上得到两个点。最后我知道线PQ的角度,所以P'Q'和P“Q”应该在同一个角度,使用这些细节,我可以得到线P'Q'和P“Q”我想要的长度。在下面的代码中,我得到的行P'Q'和P“Q”与矩形框的对角线的长度。
POINT res = find_a_point_in_distance(x1, y1, x2, y2);
POINT res2 = find_a_point_in_distance(res.x, res.y, x2, y2, halflen);
float cosA = acos((res2.x - res.x) / halflen) * 180 / PI;
float sinA = asin((res2.y - res.y) / halflen) * 180 / PI;
float cosAngle = cos((cosA + 90.0) * PI / 180.0);
float sinAngle = sin((sinA + 90.0) * PI / 180.0);
float cx1 = res.x + halflen * cosAngle;
float cy1 = res.y + halflen * sinAngle;
float cosAngle2 = cos((cosA - 90.0) * PI / 180.0);
float sinAngle2 = sin((sinA - 90.0) * PI / 180.0);
float cx2 = res.x + halflen * cosAngle2;
float cy2 = res.y + halflen * sinAngle2;
float diagonal = sqrt(width * width + height * height);
float halfdiagonal = diagonal / 2.0;
float cosAngleT = cos(cosA * PI / 180.0);
float sinAngleT = sin(sinA * PI / 180.0);
float cosAngleTD = cos((cosA + 180) * PI / 180.0);
float sinAngleTD = sin((sinA + 180) * PI / 180.0);
float cx10 = cx1 + halfdiagonal * cosAngleT;
float cy10 = cy1 + halfdiagonal * sinAngleT;
float cx11 = cx1 + halfdiagonal * cosAngleTD;
float cy11 = cy1 + halfdiagonal * sinAngleTD;
float cx20 = cx2 + halfdiagonal * cosAngleT;
float cy20 = cy2 + halfdiagonal * sinAngleT;
float cx21 = cx2 + halfdiagonal * cosAngleTD;
float cy21 = cy2 + halfdiagonal * sinAngleTD;
这里(cx10,cy10)和(cx11,cy11)是P'Q'和 (cx20,cy20)和(cx21,cy21)是P“Q”行。
然后我终于找到了P'Q'和P“Q”的交叉点与矩形的所有边