我想在兩個點之間做一條線,我使用了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)。
}
p1Pos和p2Pos是點的中心坐標。
這讓我得到的是一條線,它顯然不會對移動的物體起作用,因為矩形的角點是固定的,這里有一些例子。
我想實作一個解決方案,使 "棍子"(矩形)無論兩點的位置如何都能作業,以后我將為棍子添加某種onClick事件,這樣我就可以通過點擊它們來洗掉它們,所以解決方案也需要與此兼容。謝謝!
uj5u.com熱心網友回復:
你可以找到該行的法線。這可以通過減去p1Pos和p2Pos(并翻轉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)。
uj5u.com熱心網友回復:
如果你需要用一條 "粗線"(即一個矩形)來連接點(x1, y1)和(x2, y2),可以通過首先計算連接點1、2的線來找到頂點。然后你計算該線的法線,從點1和2經過。你的連接線的角度系數為(y2-y1)/(x2-x1),法線將有(x2-x1)/(y2-y1)。
那么你的四個頂點就在這兩條線上,分別與點1和點2的距離為d/2(d是矩形的厚度)。x1 = x2 或 y1 = y2 的情況比較特殊,因為連接線或其法線將具有無限的角度系數。
有幾個問題與這個問題有關--這個是其中之一。
uj5u.com熱心網友回復:
你要找的概念是一個正常的向量:
sf::Vector2f p1ToP2{p1Pos - p2Pos};
sf::Vector2f normal{p1ToP2.y, -p1ToP2.x}; // normal現在垂直于p1ToP2。
normal /= sqrt(pow(normal.x, 2) pow(normal. y, 2)); //normal is now of magnitude 1.
normal *= 5; //每邊十個像素。
然后你的四個角是。 { p1Pos normal, p1Pos - normal, p2Pos - normal, p2Pos normal }
uj5u.com熱心網友回復:
如果你能夠得到方角的矩形,你可能需要在每次你的點將移動時包括角的計算,相對于彼此而言
。因此,對于每次移動,你的計算將看起來像:
因此,例如:
- 如果theta是45(就像你的第一個例子),你的末端將向-45(或315)和135延伸。
- 如果theta是102.5,你的兩端將向12.5和192.5延伸 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/319993.html
標籤:



