Нарисуйте линии между точками, содержащимися в векторе (VC ++)

Я хочу нарисовать отрезки между точками, содержащимися в векторе, и отобразить их в окне.

На данный момент вот что у меня есть:

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
//Draw lines to screen.
using std::vector;
using std::iterator;
extern vector<int> euler_time;
extern vector<int> euler_soln;
hPen = CreatePen(PS_SOLID, 1, RGB(255, 25, 5));
SelectObject(hdc, hPen);
for(std::vector<int>::size_type i = 0; i != euler_time.size(); i++){
MoveToEx(hdc,euler_time[i],euler_soln[i],NULL);
LineTo(hdc,euler_time[i],euler_soln[i]);
}
EndPaint(hWnd, &ps);

Он содержится в более крупном исходном файле .CPP, созданном как при создании стандартного приложения Win32.

Как вы можете видеть, моя идея заключалась в том, чтобы перебрать мой вектор с помощью for цикл, а затем использовать LineTo а также MoveToEx перейти к следующей точке и нарисовать линию от предыдущей.

В настоящее время я получаю полностью пустое окно без ошибок. Предложения?

РЕДАКТИРОВАТЬ:

Поэтому я предполагаю, что сообщение о точке останова, упомянутое в комментариях ниже, было вызвано моей загрузкой внешнего вектора. Вектор является выходом for цикл в другом файле .CPP.

    using std::vector;
using std::iterator;
extern vector<int> euler_time;
extern vector<int> euler_soln;

И цикл в другом файле .CPP:

for (double t = a; t < b; t += h )
{
std::cout << std::fixed << std::setprecision(3) << t << " " << y << "\n";
euler_time.insert (euler_time.begin(),t); // Insert the values of t and y into the respective vectors.
euler_soln.insert (euler_soln.begin(),y);
y += h * f(t, y);
}

РЕДАКТИРОВАТЬ 2:

Итак, я начал с Polyline API. Я создал массив типа const POINT* называется Pt и попытался присвоить значения t а также y_n к этому. Я тогда позвонил Polyline и сказал ему рисовать из массива.

Я получаю без ошибок и снова пустое окно.

Из файла окна CPP:

    extern const POINT* Pt;
//Draw lines to screen.
hPen = CreatePen(PS_SOLID, 1, RGB(255, 25, 5));
SelectObject(hdc, hPen);
Polyline(hdc,Pt,10);

Из другого файла CPP:

const POINT * Pt;
void euler(F f, int y0, int a, int b, int h ) // defines a class of type     "void" (returns nothing); gives it parameters: function F, doubles: y0, a, b, h
{
int y_n = y0;
int t = a;
for (int t = a; t < b; t += h ) // creates a for loop beginning with time t = a and ending with t ~= b with stepsize h.
{
std::cout << std::fixed << std::setprecision(3) << t << " " << y_n << "\n"; // Calls the standard output from std, with floating-point numbers with precision 3; assigns the variable t, then a space, then variable y, then a new line.
LONG x = t;
LONG y = y_n;
y_n += h * f(t, y_n); // y increases by h * f(t,y) where f is the derivative y' until the condition is met y ~= b.
}
std::cout << "done\n"; // Print "done"}

РЕДАКТИРОВАТЬ 3:

Я сейчас пытаюсь использовать vector<POINT> создать вектор с точечными значениями. Тем не менее, моя попытка приводит к следующей ошибке:

6   IntelliSense: no instance of overloaded function "std::vector<_Ty, _Alloc>::insert [with _Ty=POINT, _Alloc=std::allocator<POINT>]" matches the argument list
argument types are: (std::_Vector_iterator<std::_Vector_val<std::_Simple_types<POINT>>>, double)
object type is: std::vector<POINT, std::allocator<POINT>>   c:\Users\ahlroth\Documents\Visual Studio 2012\Projects\Euler\Euler\eulerclass.cpp   22

Мой код ниже:

using std::vector;
vector<POINT> Pt;
POINT euler(F f, double y0, double a, double b, double h, vector<POINT> Pt) // defines a class of type "void" (returns nothing); gives it parameters: function F, doubles: y0, a, b, h
{
double y_n = y0;
double t = a;
for (double t = a; t < b; t += h ) // creates a for loop beginning with time t = a and ending with t ~= b with stepsize h.
{
std::cout << std::fixed << std::setprecision(3) << t << " " << y_n << "\n"; // Calls the standard output from std, with floating-point numbers with precision 3; assigns the variable t, then a space, then variable y, then a new line.
Pt.insert(Pt.begin(),t);
y_n += h * f(t, y_n); // y increases by h * f(t,y) where f is the derivative y' until the condition is met y ~= b.
}
return Pt;
std::cout << "done\n"; // Print "done"

}

Ошибка для этой строки:
Pt.insert(Pt.begin(),t);

РЕДАКТИРОВАТЬ: см. Этот пост для ответ.

0

Решение

Это потому, что вы рисуете отрезки линии нулевой длины.

Сделайте MoveTo только для первой точки, а затем LineTo для остальной.

2

Другие решения


По вопросам рекламы [email protected]