Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как вывести график только по точкам заданного диапазона?

ФермаКактусов Высший разум (184712), закрыт 1 месяц назад
 #include  
#include
#include
#include
#include
using namespace std;

const int width = 800;
const int height = 600;

// функция для расчета первой функции
float function1(float x) {
// здесь нужно написать код расчета первой функции
// например, можно использовать какую-то формулу
return 2 * x - 4;
}

// функция для расчета второй функции
float function2(float x) {
// здесь нужно написать код расчета второй функции
// например, можно использовать другую формулу
return 2 / x - 4;
}

// функция для вывода таблицы значений в консоль и в файл
void printtable(float start, float end) {
ofstream file("table.txt"); // открываем файл для записи

// выводим шапку таблицы
cout << "x\tf1(x)\tf2(x)" << endl;
file << "x\tf1(x)\tf2(x)" << endl;

float step = (end - start) / 20; // расчитываем шаг аргумента

// выводим значения функций для каждого значения аргумента
for (float x = start; x <= end; x += step) {
float value1 = function1(x);
float value2 = function2(x);

cout << x << "\t";

// проверяем, удалось ли вычислить значение функции
if (isfinite(value1)) {
cout << value1;
}
else {
cout << "-";
}

cout << "\t";

// проверяем, удалось ли вычислить значение функции
if (isfinite(value2)) {
cout << value2;
}
else {
cout << "-";
}

cout << endl;

file << x << "\t" << value1 << "\t" << value2 << endl;
}

file.close(); // закрываем файл
}

Дополнен 2 месяца назад
int main() {
setlocale(LC_ALL, "");
float start, end;

cout << "введите начальное значение интервала: ";
cin >> start;

cout << "введите конечное значение интервала: ";
cin >> end;

cout << "f1(x) = pow(x + exp(x), 1 / 15)" << endl;
cout << "f2(x) = pow(x + exp(x), 1 / 25)" << endl;
Дополнен 2 месяца назад
printtable(start, end);



sf::RenderWindow window(sf::VideoMode(width, height), "график функции");



sf::VertexArray x_axis(sf::Lines, 2);

x_axis[0].position = sf::Vector2f(0, height / 2);

x_axis[1].position = sf::Vector2f(width, height / 2);

x_axis[0].color = sf::Color::Black;

x_axis[1].color = sf::Color::Black;



sf::VertexArray y_axis(sf::Lines, 2);

y_axis[0].position = sf::Vector2f(width / 2, 0);

y_axis[1].position = sf::Vector2f(width / 2, height);

y_axis[0].color = sf::Color::Black;

y_axis[1].color = sf::Color::Black;



sf::VertexArray graph1(sf::LineStrip, width);

for (int i = 0; i < width; ++i) {

float x = i - width / 2;

float y1 = function1(x);

graph1[i].position = sf::Vector2f(x + width / 2, -y1 + height / 2);

graph1[i].color = sf::Color::Red;

}



sf::VertexArray graph2(sf::LineStrip, width);

for (int i = 0; i < width; ++i) {

float x = i - width / 2;

float y2 = function2(x);

graph2[i].position = sf::Vector2f(x + width / 2, -y2 + height / 2);

graph2[i].color = sf::Color::Green;

}



while (window.isOpen()) {

sf::Event event;

while (window.pollEvent(event)) {

if (event.type == sf::Event::Closed)

window.close();

}



window.clear(sf::Color::White);



window.draw(x_axis);

window.draw(y_axis);

window.draw(graph1);

window.draw(graph2);



window.display();

}

return 0;

}
Лучший ответ
I'm killing everyone I love Мыслитель (5353) 1 месяц назад
Для того чтобы вывести график только по точкам заданного диапазона, необходимо изменить способ создания вершин для отрисовки графиков. Вместо использования sf::LineStrip для создания гладкой линии, можно использовать sf::Points, чтобы отобразить только точки.


1. Замени создание sf::VertexArray graph1 и sf::VertexArray graph2 на создание sf::VertexArray с типом sf::Points:
sf::VertexArray graph1(sf::Points, width);
sf::VertexArray graph2(sf::Points, width);

2. Вместо установки позиции и цвета каждой точки в цикле, установи их только для точек в заданном диапазоне:
for (int i = 0; i < width; ++i) {
float x = i - width / 2;
if (x >= start && x <= end) {
float y1 = function1(x);
graph1[i].position = sf::Vector2f(x + width / 2, -y1 + height / 2);
graph1[i].color = sf::Color::Red;

float y2 = function2(x);
graph2[i].position = sf::Vector2f(x + width / 2, -y2 + height / 2);
graph2[i].color = sf::Color::Green;
}
}
Это позволит отобразить только точки графика в заданном диапазоне значений x.
Остальные ответы
Павел Стрелецкий Мастер (2246) 2 месяца назад
Ты что игры в роблоксе делаешь
Похожие вопросы