gpt4 book ai didi

c++ - 找到连接两个移动物体的矩形的 4 个角

转载 作者:行者123 更新时间:2023-12-04 14:35:14 25 4
gpt4 key购买 nike

我试图在两点之间画一条线,为此我使用了 sf::VertexArray shape(sf::Quads, 4);

这是我的整个draw 函数:

void Stick::draw(sf::RenderTarget& target, sf::RenderStates states) const {
sf::VertexArray shape(sf::Quads, 4);

sf::Vector2f p1Pos = this->p1->getPosition();
sf::Vector2f p2Pos = this->p2->getPosition();

shape[0].position = sf::Vector2f(p1Pos.x + 10.f, p1Pos.y + 10.f);
shape[1].position = sf::Vector2f(p1Pos.x - 10.f, p1Pos.y - 10.f);
shape[2].position = sf::Vector2f(p2Pos.x - 10.f, p2Pos.y - 10.f);
shape[3].position = sf::Vector2f(p2Pos.x + 10.f, p2Pos.y + 10.f);
shape[0].color = sf::Color::Green;
shape[1].color = sf::Color::Green;
shape[2].color = sf::Color::Green;
shape[3].color = sf::Color::Green;
target.draw(shape, states);
}

p1Posp2Pos 是点的中心坐标。

这让我明白了一条线显然不适用于移动的物体,因为矩形的角点是固定的,下面是一些例子:(在这个例子中,红点没有移动,而白点在移动)

Example Example 2

我想实现一个解决方案,以便无论两点的位置如何,'Stick'(矩形)都可以工作,稍后我将为棒添加某种 onClick 事件,以便我可以删除通过点击它们,所以解决方案也需要与之兼容...谢谢!

最佳答案

你可以找到线的法线。这可以通过减去位置 p1Posp2Pos(并翻转 x 或 y 的符号以获得 90° 旋转)并将其除以线的长度来完成.直线的长度可以通过毕达哥拉斯定理找到,因为它可以被认为是直角三角形的斜边。

auto diff = p1Pos - p2Pos;
auto length = std::sqrt(diff.x * diff.x + diff.y * diff.y);
auto normal = sf::Vector2f(p1Pos.y - p2Pos.y, p2Pos.x - p1Pos.x) / length;
auto thickness = 15.0f;

shape[0].position = sf::Vector2f(p1Pos.x + normal.x * thickness, p1Pos.y + normal.y * thickness);
shape[1].position = sf::Vector2f(p1Pos.x - normal.x * thickness, p1Pos.y - normal.y * thickness);
shape[2].position = sf::Vector2f(p2Pos.x - normal.x * thickness, p2Pos.y - normal.y * thickness);
shape[3].position = sf::Vector2f(p2Pos.x + normal.x * thickness, p2Pos.y + normal.y * thickness);

结果如下: the line

关于c++ - 找到连接两个移动物体的矩形的 4 个角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69075168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com