Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 显示更多点,然后显示分辨率_C++_C_Visual Studio_Fopen_Iostream - Fatal编程技术网

C++ 显示更多点,然后显示分辨率

C++ 显示更多点,然后显示分辨率,c++,c,visual-studio,fopen,iostream,C++,C,Visual Studio,Fopen,Iostream,我正在绘制一个包含2000多个点的图形到一个pdf文件。pdf的分辨率为612 x 792。我只能在pdf上画612个点,因为宽度是612。我正在将1个点映射到1个像素。如何将所有2000多个样本打印到pdf。我正在使用这个库。选项1:使用x=(x*612)/2000缩放点。这意味着如果两个点彼此接近(包括“相似y”),它们将相互覆盖 选项2:将每个点视为正方形;并计算已缩放的“左边缘x”和“右边缘x”的浮点值(left_x=((x-width/2.0)*612.0)/2000.0;right_

我正在绘制一个包含2000多个点的图形到一个pdf文件。pdf的分辨率为612 x 792。我只能在pdf上画612个点,因为宽度是612。我正在将1个点映射到1个像素。如何将所有2000多个样本打印到pdf。我正在使用这个库。

选项1:使用
x=(x*612)/2000缩放点。这意味着如果两个点彼此接近(包括“相似y”),它们将相互覆盖

选项2:将每个点视为正方形;并计算已缩放的“左边缘x”和“右边缘x”的浮点值(
left_x=((x-width/2.0)*612.0)/2000.0;right_x=((x+width/2.0)*612.0)/2000.0;
),通过计算“正方形重叠的目标像素面积”,使用抗锯齿绘制正方形对于与正方形重叠的每个目标像素。在这种情况下,需要执行“dest_pixel=max(dest_pixel+area,1);”以在正方形重叠时钳制像素值

选项3:将整个东西旋转90度,使“x轴”垂直向下移动到页面上(必要时可以拆分为多个页面);如果这导致y出现问题,则使用上述y选项之一

请注意,“选项2”可以同时在两个(垂直和水平)方向上执行。要执行此操作,请先确定正方形的边,如:

    left_x = point_x / MAX_SRC_X * MAX_DEST_X;
    right_x = (point_x + 1) / MAX_SRC_X * MAX_DEST_X;
    top_y = point_y / MAX_SRC_Y * MAX_DEST_Y;
    bottom_y = (point_y + 1) / MAX_SRC_Y * MAX_DEST_Y;
然后有一个“for each row that effected”循环,用于计算每行受影响的程度,如:

    for(int y = top_y; y < bottom_y; y++) {
        row_top = fmax(y, top_y);
        row_bottom = fmin(y+1, bottom_y);
        row_weight = row_bottom - row_top;
注:以上所有代码均未经测试和简化。将循环分解为“第一行/列;仅中间区域的循环;然后是最后一行/列”可以更快地删除大部分
fmin
/
fmax


如果您只需要在一个方向上执行此操作,请删除不需要的方向的部分,并对相应的
行权重
列权重
使用
1.0

可能重复的@Brendan-我尝试了第一个选项,它可以绘制所有点,但会扭曲绘图。情节并不顺利。我不确定如何实现选项2。
        for(int x = left_x; x < right_x; x++) {
            column_left = fmax(x, left_x);
            column_right = fmin(x+1, right_x);
            column_weight = column_right - column_left;
            dest_pixel_area = row_weight * column_weight;
            pixel[y][x].red = min(pixel[y][x].red + dest_pixel_area * red, MAX_RED);
            pixel[y][x].green = min(pixel[y][x].green + dest_pixel_area * green, MAX_GREEN);
            pixel[y][x].blue = min(pixel[y][x].blue + dest_pixel_area * blue, MAX_BLUE);
        }
    }