#rust #sfml
Вопрос:
Поэтому я использовал структуру выпуклой формы для создания треугольников, используя привязки rust для sfml.
Мой код выглядит следующим образом:
let mut shape2 = ConvexShape::new(3); shape2.set_point(0, Vector2f::new(0.0, 0.0)); shape2.set_point(1, Vector2f::new(0.0, 100.0)); shape2.set_point(2, Vector2f::new(100.0, 0.0)); for point in shape2.points() { println!("x:{} y:{}", point.x, point.y); }
Однако при циклическом переборе точек для треугольников иногда я получал такой вывод:
x:0 y:100 x:100 y:0 x:434583.44 y:-0.000000000000000000000000000000000000000047353
Я не уверен, что вызывает эту проблему; однако я предполагаю, что это связано с переполнением f32. Есть ли какие-либо исправления этой проблемы или я делаю что-то не так здесь?
Ответ №1:
Похоже, это ошибка в итераторе, возвращаемом .points()
. Вместо этого вы можете прибегнуть к извлечению непосредственно по индексу (доступ к которому осуществляется через Shape
признак).:
use sfml::graphics::{ConvexShape, Shape}; use sfml::system::Vector2f; ... let mut shape2 = ConvexShape::new(3); shape2.set_point(0, Vector2f::new(0.0, 0.0)); shape2.set_point(1, Vector2f::new(0.0, 100.0)); shape2.set_point(2, Vector2f::new(100.0, 0.0)); for i in 0..shape2.point_count() { let point = shape2.point(i); println!("x:{} y:{}", point.x, point.y); }