Выпуклые формы вершины не являются точными SFML ржавчина

#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); }