fworldperscreenwidththpixel如何用于循环绘制
How does fWorldPerScreenWidthPixel work for drawing in loop
此代码用功能绘制正弦波。在以下平移/缩放代码中,我试图了解如何使用fworldperscreenwidththpixel绘制行段。
WorldToScreen(fWorldLeft - fWorldPerScreenWidthPixel, -function((fWorldLeft - fWorldPerScreenWidthPixel) - 5.0f) + 5.0f, opx, opy);
它设置了OPX和OPY,但是为什么从:fworldleft
中减去想要在绘制线路的for循环中开始fworldleft的左开始。fworldleft开始于-25。
我包含了必要的代码来解释:
// Draw Chart
float fWorldPerScreenWidthPixel = (fWorldRight - fWorldLeft) / ScreenWidth();
float fWorldPerScreenHeightPixel = (fWorldBottom - fWorldTop) / ScreenHeight();
int px, py, opx = 0, opy = 0;
WorldToScreen(fWorldLeft - fWorldPerScreenWidthPixel, -function((fWorldLeft - fWorldPerScreenWidthPixel) - 5.0f) + 5.0f, opx, opy);
for (float x = fWorldLeft; x < fWorldRight; x += fWorldPerScreenWidthPixel)
{
float y = -function(x - 5.0f) + 5.0f;
WorldToScreen(x, y, px, py);
DrawLine(opx, opy, px, py, PIXEL_SOLID, FG_GREEN);
opx = px;
opy = py;
}
致电设置fworldleft:
// Clip
float fWorldLeft, fWorldTop, fWorldRight, fWorldBottom;
ScreenToWorld(0, 0, fWorldLeft, fWorldTop);
设置fworldleft:
// Convert coordinates from Screen Space --> World Space
void ScreenToWorld(int nScreenX, int nScreenY, float &fWorldX, float &fWorldY)
{
fWorldX = ((float)nScreenX / fScaleX) + fOffsetX;
fWorldY = ((float)nScreenY / fScaleY) + fOffsetY;
}
当我在此时,要屏幕世界:
// Convert coordinates from World Space --> Screen Space
void WorldToScreen(float fWorldX, float fWorldY, int &nScreenX, int &nScreenY)
{
nScreenX = (int)((fWorldX - fOffsetX) * fScaleX);
nScreenY = (int)((fWorldY - fOffsetY) * fScaleY);
}
谢谢!
josh
让我们将其分解
WorldToScreen(
fWorldLeft - fWorldPerScreenWidthPixel,
-function((fWorldLeft - fWorldPerScreenWidthPixel) - 5.0f) + 5.0f,
opx, opy);
更清晰的写作方式
x = fWorldLeft - fWorldPerScreenWidthPixel;
WorldToScreen(
x,
-function((x) - 5.0f) + 5.0f,
opx, opy);
这将(x, f(x))
的位置从世界空间转换为屏幕空间,并将结果存储在(opx, opy)
中。让我们看看如何使用这两个变量:
for(...)
{
...
DrawLine(opx, opy, px, py, PIXEL_SOLID, FG_GREEN);
...
}
这绘制了从 (opx, opy)
到 (px, py)
的行(这是函数上的当前点。(opx, opy)
是函数的旧点。这正是您从上方的初始化所做的。您将(opx, opy)
设置为一个点那是屏幕外面的一个像素,以确保边框没有差距。
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- fworldperscreenwidththpixel如何用于循环绘制
- 如何在循环中绘制东西(fltk/c )
- 在 openGL 中播放音频而不冻结绘制循环
- 对于循环重复绘制问题
- 在绘制循环中绘制精灵
- 使用 for 循环绘制边框
- 如何为带有循环的 c++ 绘制矩形
- 对于循环奇怪的循环,用于使用 Qt 创建器绘制矩形
- 使用 for 循环 Qt c++ 绘制圆圈
- Q对话框未在循环中绘制
- 是否可以在仅用于循环的形状中绘制形状?如果是,请给我指一个正确的方向
- 在循环中以特定坐标绘制
- 使用嵌套For循环绘制点
- 在主循环之外绘制背景时闪烁
- 在while (window.isOpen())循环之外绘制对象