日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码

發布時間:2024/10/8 编程问答 85 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【計算機圖形學】3-2 二維幾何變換基本代碼

返回目錄

基本理論參見:【計算機圖形學】3-1 二維幾何變換基本理論

注:這里不考慮插值的問題。

全部的代碼都在https://github.com/CyberZHG/ZPIC上,歡迎各位前來圍觀和提出意見。

效果截圖:

移動:

縮放:

旋轉:

錯切 :

改變旋轉中心后的旋轉:

transform_matrix.h

#ifndef TRANSFORM_MATRIX_H_INCLUDED

#define TRANSFORM_MATRIX_H_INCLUDED

#include

#include "define.h"

typedef struct Transform_Matrix_9d

{

double m[3][3];

}Transform_Matrix_9d;

void transform_matrix_init(Transform_Matrix_9d *matrix);

void transform_matrix_clear(Transform_Matrix_9d *matrix);

void transform_matrix_add(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2);

void transform_matrix_substract(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2);

void transform_matrix_multiply(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2);

void transform_matrix_copy(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2);

void transform_matrix_transformPoint(const Transform_Matrix_9d matrix, int32 *x, int32 *y);

void transform_matrix_move(Transform_Matrix_9d *matrix, double tx, double ty);

void transform_matrix_scale(Transform_Matrix_9d *matrix, double sx, double sy);

void transform_matrix_rotate(Transform_Matrix_9d *matrix, double angle);

void transform_matrix_shear(Transform_Matrix_9d *matrix, double b, double d);

#endif // TRANSFORM_MATRIX_H_INCLUDED

transform_matrix.c

#include "transform_matrix.h"

void transform_matrix_init(Transform_Matrix_9d *matrix)

{

int32 i, j;

for(i=0;i<3;++i)

{

for(j=0;j<3;++j)

{

matrix->m[i][j] = 0.0;

}

matrix->m[i][i] = 1.0;

}

}

void transform_matrix_clear(Transform_Matrix_9d *matrix)

{

int32 i, j;

for(i=0;i<3;++i)

{

for(j=0;j<3;++j)

{

matrix->m[i][j] = 0.0;

}

}

}

void transform_matrix_add(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2)

{

int32 i, j;

for(i=0;i<3;++i)

{

for(j=0;j<3;++j)

{

m1->m[i][j] += m2.m[i][j];

}

}

}

void transform_matrix_substract(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2)

{

int32 i, j;

for(i=0;i<3;++i)

{

for(j=0;j<3;++j)

{

m1->m[i][j] -= m2.m[i][j];

}

}

}

void transform_matrix_multiply(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2)

{

int32 i, j, k;

Transform_Matrix_9d temp;

transform_matrix_clear(&temp);

for(i=0;i<3;++i)

{

for(j=0;j<3;++j)

{

for(k=0;k<3;++k)

{

temp.m[i][j] += m1->m[i][k] * m2.m[k][j];

}

}

}

for(i=0;i<3;++i)

{

for(j=0;j<3;++j)

{

m1->m[i][j] = temp.m[i][j];

}

}

}

void transform_matrix_copy(Transform_Matrix_9d *m1, const Transform_Matrix_9d m2)

{

int32 i, j;

for(i=0;i<3;++i)

{

for(j=0;j<3;++j)

{

m1->m[i][j] = m2.m[i][j];

}

}

}

void transform_matrix_transformPoint(const Transform_Matrix_9d matrix, int32 *x, int32 *y)

{

int32 tx, ty;

tx = (int)(*x * matrix.m[0][0] + *y * matrix.m[1][0] + matrix.m[2][0]);

ty = (int)(*x * matrix.m[0][1] + *y * matrix.m[1][1] + matrix.m[2][1]);

*x = tx;

*y = ty;

}

void transform_matrix_move(Transform_Matrix_9d *matrix, double tx, double ty)

{

Transform_Matrix_9d moveMatrix;

transform_matrix_init(&moveMatrix);

moveMatrix.m[2][0] = tx;

moveMatrix.m[2][1] = ty;

transform_matrix_multiply(matrix, moveMatrix);

}

void transform_matrix_scale(Transform_Matrix_9d *matrix, double sx, double sy)

{

Transform_Matrix_9d scaleMatrix;

transform_matrix_init(&scaleMatrix);

scaleMatrix.m[0][0] = sx;

scaleMatrix.m[1][1] = sy;

transform_matrix_multiply(matrix, scaleMatrix);

}

void transform_matrix_rotate(Transform_Matrix_9d *matrix, double angle)

{

Transform_Matrix_9d rotateMatrix;

transform_matrix_init(&rotateMatrix);

rotateMatrix.m[0][0] = rotateMatrix.m[1][1] = cos(angle);

rotateMatrix.m[1][0] = - (rotateMatrix.m[0][1] = sin(angle));

transform_matrix_multiply(matrix, rotateMatrix);

}

void transform_matrix_shear(Transform_Matrix_9d *matrix, double b, double d)

{

Transform_Matrix_9d shearMatrix;

transform_matrix_init(&shearMatrix);

shearMatrix.m[0][1] = b;

shearMatrix.m[1][0] = d;

transform_matrix_multiply(matrix, shearMatrix);

}

transform_selection.h

#ifndef TRANSFORM_SELECTION_H_INCLUDED

#define TRANSFORM_SELECTION_H_INCLUDED

#include

#include

#include "define.h"

#include "gui.h"

#include "draw.h"

#include "transform_matrix.h"

typedef struct Transform_Selection_10i2f1m

{

int32 x[4], y[4];

float cx, cy;

draw_color **color;

int32 **px;

int32 **py;

Transform_Matrix_9d transMatrix;

}Transform_Selection_10i2f1m;

void transform_selection_display(void);

void transform_selection_mouseEvent(int32 state, int32 x, int32 y);

void transform_selection_keyboardEvent(int32 key, int32 state);

#endif // TRANSFORM_SELECTION_H_INCLUDED

transform_selection.c

#include "transform_selection.h"

static Transform_Selection_10i2f1m transform_default_selection;

int32 isMovingCenter;

int32 isSelecting;

int32 isSelected;

int32 isMoving;

int32 isResizing;

int32 isRotating;

int32 isShearing;

int32 isMouseDown;

int32 isFinshed;

int32 startX, startY;

int32 endX, endY;

int32 lastEdgeX, lastEdgeY;

Transform_Matrix_9d startMatrix;

int32 isShiftDown;

void transform_selection_display(void)

{

int32 i, j, w, h;

int32 x[4], y[4], mx, my;

float cx, cy;

int32 edgeL, edgeR, edgeB, edgeT;

draw_color **color;

int32 **px, **py;

int32 tx, ty;

Transform_Matrix_9d *matrix = &transform_default_selection.transMatrix;

draw_color penColor = draw_pen_getColor();

draw_color brushColor = draw_brush_getColor();

draw_pen_setColor(DRAW_COLOR_WHITE);

draw_brush_setColor(DRAW_COLOR_BLACK);

for(i=0;i<4;++i)

{

x[i] = transform_default_selection.x[i];

y[i] = transform_default_selection.y[i];

transform_matrix_transformPoint(*matrix, &x[i], &y[i]);

}

edgeL = min(min(x[0], x[1]), min(x[2], x[3]));

edgeR = max(max(x[0], x[1]), max(x[2], x[3]));

edgeB = min(min(y[0], y[1]), min(y[2], y[3]));

edgeT = max(max(y[0], y[1]), max(y[2], y[3]));

mx = (edgeL + edgeR) >> 1;

my = (edgeB + edgeT) >> 1;

cx = transform_default_selection.cx;

cy = transform_default_selection.cy;

w = abs(transform_default_selection.x[0] - transform_default_selection.x[2]) - 1;

h = abs(transform_default_selection.y[0] - transform_default_selection.y[2]) - 1;

color = transform_default_selection.color;

px = transform_default_selection.px;

py = transform_default_selection.py;

if(isSelecting)

{

if(isSelected)

{

for(i=0;i

{

for(j=0;j

{

gui_setPixel_2i1u(px[i][j], py[i][j], DRAW_COLOR_BLACK);

}

}

for(i=0;i

{

for(j=0;j

{

tx = px[i][j], ty = py[i][j];

transform_matrix_transformPoint(*matrix, &tx, &ty);

gui_setPixel_2i1u(tx, ty, color[i][j]);

}

}

if(isFinshed)

{

gui_saveCurrentImage();

isSelecting = 0;

isSelected = 0;

isMoving = 0;

isResizing = 0;

isRotating = 0;

isShearing = 0;

isFinshed = 0;

isMouseDown = 0;

w = abs(transform_default_selection.x[0] - transform_default_selection.x[2]) - 1;

h = abs(transform_default_selection.y[0] - transform_default_selection.y[2]) - 1;

for(i=0;i

{

free(transform_default_selection.color[i]);

free(transform_default_selection.px[i]);

free(transform_default_selection.py[i]);

}

free(transform_default_selection.color);

free(transform_default_selection.px);

free(transform_default_selection.py);

}

else

{

draw_line_4i(edgeL, edgeT, edgeR, edgeT);

draw_line_4i(edgeL, edgeB, edgeR, edgeB);

draw_line_4i(edgeL, edgeT, edgeL, edgeB);

draw_line_4i(edgeR, edgeT, edgeR, edgeB);

draw_dotted_line_4i(x[0], y[0], x[1], y[1]);

draw_dotted_line_4i(x[1], y[1], x[2], y[2]);

draw_dotted_line_4i(x[2], y[2], x[3], y[3]);

draw_dotted_line_4i(x[3], y[3], x[0], y[0]);

draw_rectangle_4i(edgeL - 3, edgeT - 3, edgeL + 3, edgeT + 3);

draw_rectangle_4i(edgeL - 3, edgeB - 3, edgeL + 3, edgeB + 3);

draw_rectangle_4i(edgeR - 3, edgeT - 3, edgeR + 3, edgeT + 3);

draw_rectangle_4i(edgeR - 3, edgeB - 3, edgeR + 3, edgeB + 3);

draw_rectangle_4i(edgeL - 3, my - 3, edgeL + 3, my + 3);

draw_rectangle_4i(mx - 3, edgeB - 3, mx + 3, edgeB + 3);

draw_rectangle_4i(edgeR - 3, my - 3, edgeR + 3, my + 3);

draw_rectangle_4i(mx - 3, edgeT - 3, mx + 3, edgeT + 3);

draw_circle_3i(cx, cy, 3);

if(isMoving)

{

gui_setMainWindowCursor(CURSOR_SIZEALL);

}

else if(isResizing)

{

switch(isResizing)

{

case POSITION_LEFT:

gui_setMainWindowCursor(CURSOR_SIZEWE);

break;

case POSITION_RIGHT:

gui_setMainWindowCursor(CURSOR_SIZEWE);

break;

case POSITION_TOP:

gui_setMainWindowCursor(CURSOR_SIZENS);

break;

case POSITION_BOTTOM:

gui_setMainWindowCursor(CURSOR_SIZENS);

break;

case POSITION_TOPLEFT:

gui_setMainWindowCursor(CURSOR_SIZENESW);

break;

case POSITION_TOPRIGHT:

gui_setMainWindowCursor(CURSOR_SIZENWSE);

break;

case POSITION_BOTTOMLEFT:

gui_setMainWindowCursor(CURSOR_SIZENWSE);

break;

case POSITION_BOTTOMRIGHT:

gui_setMainWindowCursor(CURSOR_SIZENESW);

break;

}

}

else if(isRotating)

{

gui_setMainWindowCursor(CURSOR_NO);

}

else if(isShearing)

{

switch(isShearing)

{

case POSITION_BOTTOM:

case POSITION_TOP:

gui_setMainWindowCursor(CURSOR_SIZEWE);

break;

case POSITION_LEFT:

case POSITION_RIGHT:

gui_setMainWindowCursor(CURSOR_SIZENS);

break;

}

}

}

}

else

{

gui_setMainWindowCursor(CURSOR_CROSS);

draw_dotted_line_4i(x[0], y[0], x[2], y[0]);

draw_dotted_line_4i(x[0], y[2], x[2], y[2]);

draw_dotted_line_4i(x[0], y[0], x[0], y[2]);

draw_dotted_line_4i(x[2], y[0], x[2], y[2]);

}

}

else

{

gui_setMainWindowCursor(CURSOR_CROSS);

}

draw_pen_setColor(penColor);

draw_brush_setColor(brushColor);

}

void transform_selection_mouseEvent(int32 state, int32 x, int32 y)

{

int32 i, j, w, h;

int32 rx[4], ry[4], mx, my, cx, cy;

int32 edgeL, edgeR, edgeB, edgeT;

double angle;

Transform_Matrix_9d *matrix = &transform_default_selection.transMatrix;

for(i=0;i<4;++i)

{

rx[i] = transform_default_selection.x[i];

ry[i] = transform_default_selection.y[i];

transform_matrix_transformPoint(*matrix, &rx[i], &ry[i]);

}

edgeL = min(min(rx[0], rx[1]), min(rx[2], rx[3]));

edgeR = max(max(rx[0], rx[1]), max(rx[2], rx[3]));

edgeB = min(min(ry[0], ry[1]), min(ry[2], ry[3]));

edgeT = max(max(ry[0], ry[1]), max(ry[2], ry[3]));

mx = (edgeL + edgeR) >> 1;

my = (edgeB + edgeT) >> 1;

cx = transform_default_selection.cx;

cy = transform_default_selection.cy;

switch(state)

{

case MOUSE_DOWN_LEFT:

isMouseDown = 1;

if(isSelected)

{

startX = x;

startY = y;

endX = x;

endY = y;

transform_matrix_copy(&startMatrix, *matrix);

if(isResizing)

{

switch(isResizing)

{

case POSITION_LEFT:

lastEdgeX = edgeR;

break;

case POSITION_RIGHT:

lastEdgeX = edgeL;

break;

case POSITION_BOTTOM:

lastEdgeY = edgeT;

break;

case POSITION_TOP:

lastEdgeY = edgeB;

break;

case POSITION_BOTTOMLEFT:

lastEdgeX = edgeR;

lastEdgeY = edgeT;

break;

case POSITION_BOTTOMRIGHT:

lastEdgeX = edgeL;

lastEdgeY = edgeT;

break;

case POSITION_TOPLEFT:

lastEdgeX = edgeR;

lastEdgeY = edgeB;

break;

case POSITION_TOPRIGHT:

lastEdgeX = edgeL;

lastEdgeY = edgeB;

break;

}

}

else if(isShearing)

{

switch(isShearing)

{

case POSITION_BOTTOM:

case POSITION_RIGHT:

lastEdgeX = edgeL;

lastEdgeY = edgeT;

break;

case POSITION_TOP:

case POSITION_LEFT:

lastEdgeX = edgeR;

lastEdgeY = edgeB;

break;

}

}

}

else

{

isSelecting = 1;

transform_default_selection.x[0] = x;

transform_default_selection.y[0] = y;

transform_default_selection.x[2] = x;

transform_default_selection.y[2] = y;

transform_matrix_init(&transform_default_selection.transMatrix);

}

break;

case MOUSE_UP_LEFT:

isMouseDown = 0;

if(isSelecting)

{

if(isSelected)

{

if(isMovingCenter || isMoving || isResizing || isRotating || isShearing)

{

return;

}

if(x < edgeL - 10 || x > edgeR + 10 || y < edgeB - 10 || y > edgeT + 10)

{

isFinshed = 1;

}

}

else

{

transform_default_selection.x[1] = x;

transform_default_selection.y[1] = ry[0];

transform_default_selection.x[3] = rx[0];

transform_default_selection.y[3] = y;

transform_default_selection.x[2] = x;

transform_default_selection.y[2] = y;

transform_default_selection.cx = (transform_default_selection.x[0] +

transform_default_selection.x[2]) >> 1;

transform_default_selection.cy = (transform_default_selection.y[0] +

transform_default_selection.y[2]) >> 1;

isSelected = 1;

w = abs(transform_default_selection.x[0] - transform_default_selection.x[2]) - 1;

h = abs(transform_default_selection.y[0] - transform_default_selection.y[2]) - 1;

transform_default_selection.color = (draw_color**)malloc(sizeof(draw_color*) * h);

transform_default_selection.px = (int32**)malloc(sizeof(int32*) * h);

transform_default_selection.py = (int32**)malloc(sizeof(int32*) * h);

for(i=0;i

{

transform_default_selection.color[i] = (draw_color*)malloc(sizeof(draw_color) * w);

transform_default_selection.px[i] = (int32*)malloc(sizeof(int32) * w);

transform_default_selection.py[i] = (int32*)malloc(sizeof(int32) * w);

for(j=0;j

{

transform_default_selection.color[i][j] = gui_getPixel(min(transform_default_selection.x[0], transform_default_selection.x[2]) + j + 1,

min(transform_default_selection.y[0], transform_default_selection.y[2]) + i + 1);

transform_default_selection.px[i][j] = min(transform_default_selection.x[0], transform_default_selection.x[2]) + j + 1;

transform_default_selection.py[i][j] = min(transform_default_selection.y[0], transform_default_selection.y[2]) + i + 1;

}

}

}

}

break;

case MOUSE_MOVE:

if(isSelecting)

{

if(isSelected)

{

if(isMouseDown)

{

if(isMovingCenter)

{

transform_default_selection.cx += x - endX;

transform_default_selection.cy += y - endY;

endX = x;

endY = y;

}

else if(isMoving)

{

transform_matrix_move(matrix, x - startX, y - startY);

transform_default_selection.cx += x - startX;

transform_default_selection.cy += y - startY;

startX = x;

startY = y;

}

else if(isResizing)

{

transform_matrix_copy(matrix, startMatrix);

switch(isResizing)

{

case POSITION_LEFT:

if(startX != lastEdgeX && endX != lastEdgeX)

{

transform_matrix_move(matrix, - lastEdgeX, 0);

if(x > lastEdgeX)

{

transform_matrix_scale(matrix, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

else

{

transform_matrix_scale(matrix, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

transform_matrix_move(matrix, lastEdgeX, 0);

}

transform_default_selection.cx += (x - endX) * 0.5;

endX = x;

break;

case POSITION_RIGHT:

if(startX != lastEdgeX && endX != lastEdgeX)

{

transform_matrix_move(matrix, - lastEdgeX, 0);

if(x < lastEdgeX)

{

transform_matrix_scale(matrix, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

else

{

transform_matrix_scale(matrix, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

transform_matrix_move(matrix, lastEdgeX, 0);

}

transform_default_selection.cx += (x - endX) * 0.5;

endX = x;

break;

case POSITION_BOTTOM:

if(startY != lastEdgeY && endY != lastEdgeY)

{

transform_matrix_move(matrix, 0, - lastEdgeY);

if(y > lastEdgeY)

{

transform_matrix_scale(matrix, 1.0, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

else

{

transform_matrix_scale(matrix, 1.0, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

transform_matrix_move(matrix, 0, lastEdgeY);

}

transform_default_selection.cy += (y - endY) * 0.5;

endY = y;

break;

case POSITION_TOP:

if(startY != lastEdgeY && endY != lastEdgeY)

{

transform_matrix_move(matrix, 0, - lastEdgeY);

if(y < lastEdgeY)

{

transform_matrix_scale(matrix, 1.0, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

else

{

transform_matrix_scale(matrix, 1.0, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

transform_matrix_move(matrix, 0, lastEdgeY);

}

transform_default_selection.cy += (y - endY) * 0.5;

endY = y;

break;

case POSITION_BOTTOMLEFT:

if(startX != lastEdgeX && endX != lastEdgeX)

{

transform_matrix_move(matrix, - lastEdgeX, -lastEdgeY);

if(x > lastEdgeX)

{

transform_matrix_scale(matrix, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

else

{

transform_matrix_scale(matrix, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

if(y > lastEdgeY)

{

transform_matrix_scale(matrix, 1.0, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

else

{

transform_matrix_scale(matrix, 1.0, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

}

transform_default_selection.cx += (x - endX) * 0.5;

transform_default_selection.cy += (y - endY) * 0.5;

endX = x;

endY = y;

break;

case POSITION_BOTTOMRIGHT:

if(startX != lastEdgeX && endX != lastEdgeX)

{

transform_matrix_move(matrix, - lastEdgeX, -lastEdgeY);

if(x < lastEdgeX)

{

transform_matrix_scale(matrix, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

else

{

transform_matrix_scale(matrix, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

if(y > lastEdgeY)

{

transform_matrix_scale(matrix, 1.0, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

else

{

transform_matrix_scale(matrix, 1.0, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

}

transform_default_selection.cx += (x - endX) * 0.5;

transform_default_selection.cy += (y - endY) * 0.5;

endX = x;

endY = y;

break;

case POSITION_TOPLEFT:

if(startX != lastEdgeX && endX != lastEdgeX)

{

transform_matrix_move(matrix, - lastEdgeX, -lastEdgeY);

if(x > lastEdgeX)

{

transform_matrix_scale(matrix, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

else

{

transform_matrix_scale(matrix, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

if(y < lastEdgeY)

{

transform_matrix_scale(matrix, 1.0, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

else

{

transform_matrix_scale(matrix, 1.0, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

}

transform_default_selection.cx += (x - endX) * 0.5;

transform_default_selection.cy += (y - endY) * 0.5;

endX = x;

endY = y;

break;

case POSITION_TOPRIGHT:

if(startX != lastEdgeX && endX != lastEdgeX)

{

transform_matrix_move(matrix, - lastEdgeX, -lastEdgeY);

if(x < lastEdgeX)

{

transform_matrix_scale(matrix, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

else

{

transform_matrix_scale(matrix, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX), 1.0);

}

if(y < lastEdgeY)

{

transform_matrix_scale(matrix, 1.0, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

else

{

transform_matrix_scale(matrix, 1.0, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY));

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

}

transform_default_selection.cx += (x - endX) * 0.5;

transform_default_selection.cy += (y - endY) * 0.5;

endX = x;

endY = y;

break;

}

}

else if(isRotating)

{

transform_matrix_copy(matrix, startMatrix);

angle = atan2(y - cx, x - cy) - atan2(startY - cy, startX - cx);

transform_matrix_move(matrix, -cx, -cy);

transform_matrix_rotate(matrix, angle);

transform_matrix_move(matrix, cx, cy);

}

else if(isShearing)

{

switch(isShearing)

{

case POSITION_BOTTOM:

transform_matrix_copy(matrix, startMatrix);

transform_matrix_move(matrix, -lastEdgeX, -lastEdgeY);

if(x > lastEdgeX)

{

transform_matrix_shear(matrix, 0.0, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX) + 1.0);

}

else

{

transform_matrix_shear(matrix, 0.0, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX) + 1.0);

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

transform_default_selection.cx += x - endX;

endX = x;

break;

case POSITION_RIGHT:

transform_matrix_copy(matrix, startMatrix);

transform_matrix_move(matrix, -lastEdgeX, -lastEdgeY);

if(y < lastEdgeY)

{

transform_matrix_shear(matrix, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY) + 1.0, 0.0);

}

else

{

transform_matrix_shear(matrix, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY) + 1.0, 0.0);

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

transform_default_selection.cy += y - endY;

endY = y;

break;

case POSITION_TOP:

transform_matrix_copy(matrix, startMatrix);

transform_matrix_move(matrix, -lastEdgeX, -lastEdgeY);

if(x < lastEdgeX)

{

transform_matrix_shear(matrix, 0.0, - 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX) + 1.0);

}

else

{

transform_matrix_shear(matrix, 0.0, 1.0 * abs(x - lastEdgeX) / abs(startX - lastEdgeX) + 1.0);

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

transform_default_selection.cx += x - endX;

endX = x;

break;

case POSITION_LEFT:

transform_matrix_copy(matrix, startMatrix);

transform_matrix_move(matrix, -lastEdgeX, -lastEdgeY);

if(y > lastEdgeY)

{

transform_matrix_shear(matrix, - 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY) + 1.0, 0.0);

}

else

{

transform_matrix_shear(matrix, 1.0 * abs(y - lastEdgeY) / abs(startY - lastEdgeY) + 1.0, 0.0);

}

transform_matrix_move(matrix, lastEdgeX, lastEdgeY);

transform_default_selection.cy += y - endY;

endY = y;

break;

}

}

}

else

{

if(abs(x - cx) <= 4 && abs(y - cy) <= 4)

{

isMovingCenter = 1;

isMoving = 0;

isResizing = 0;

isRotating = 0;

isShearing = 0;

return;

}

if(abs(x - edgeL) <= 4 && abs(y - my) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_LEFT;

return;

}

if(abs(x - edgeR) <= 4 && abs(y - my) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_RIGHT;

return;

}

if(abs(x - mx) <= 4 && abs(y - edgeB) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_BOTTOM;

return;

}

if(abs(x - mx) <= 4 && abs(y - edgeT) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_TOP;

return;

}

if(abs(x - edgeL) <= 4 && abs(y - edgeT) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_TOPLEFT;

return;

}

if(abs(x - edgeL) <= 4 && abs(y - edgeB) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_BOTTOMLEFT;

return;

}

if(abs(x - edgeR) <= 4 && abs(y - edgeT) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_TOPRIGHT;

return;

}

if(abs(x - edgeR) <= 4 && abs(y - edgeB) <= 4)

{

isMovingCenter = 0;

isMoving = 0;

isRotating = 0;

isShearing = 0;

isResizing = POSITION_BOTTOMRIGHT;

return;

}

if(x > edgeL + 4 && x < edgeR - 4 && y > edgeB + 4 && y < edgeT - 4)

{

isMovingCenter = 0;

isResizing = 0;

isRotating = 0;

isShearing = 0;

isMoving = 1;

return;

}

if((x > edgeR + 4 && x <= edgeR + 8 && y < edgeB - 4 && y >= edgeB - 8))

{

isMovingCenter = 0;

isResizing = 0;

isRotating = 1;

isShearing = 0;

isMoving = 0;

return;

}

if(x >= edgeR - 4 && x < edgeR && y < edgeB - 4 && y >= edgeB - 8)

{

isMovingCenter = 0;

isResizing = 0;

isRotating = 0;

isShearing = POSITION_BOTTOM;

isMoving = 0;

return;

}

if(x > edgeR + 4 && x <= edgeR + 8 && y <= edgeB + 4 && y > edgeB)

{

isMovingCenter = 0;

isResizing = 0;

isRotating = 0;

isShearing = POSITION_RIGHT;

isMoving = 0;

return;

}

if(x > edgeL && x <= edgeL + 4 && y > edgeT + 4 && y <= edgeT + 8)

{

isMovingCenter = 0;

isResizing = 0;

isRotating = 0;

isShearing = POSITION_TOP;

isMoving = 0;

return;

}

if(x > edgeL - 8 && x <= edgeL - 4 && y >= edgeT - 4 && y < edgeT)

{

isMovingCenter = 0;

isResizing = 0;

isRotating = 0;

isShearing = POSITION_LEFT;

isMoving = 0;

return;

}

isMovingCenter = 0;

isMoving = 0;

isResizing = 0;

isRotating = 0;

isShearing = 0;

}

}

else

{

transform_default_selection.x[2] = x;

transform_default_selection.y[2] = y;

}

}

break;

case MOUSE_DOWN_RIGHT:

if(isSelecting)

{

isSelecting = 0;

}

break;

}

}

void transform_selection_keyboardEvent(int32 key, int32 state)

{

switch(state)

{

case KEY_STATE_DOWN:

switch(key)

{

case KEY_VALUE_SHIFT:

isShiftDown = 1;

}

break;

case KEY_STATE_UP:

switch(key)

{

case KEY_VALUE_SHIFT:

isShiftDown = 0;

}

break;

}

}

總結

以上是生活随笔為你收集整理的c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产黄视频在线观看 | 免费午夜在线视频 | 天天干夜夜 | 国产精品久久在线观看 | av免费观看网站 | 国产不卡视频在线 | 天堂av观看| 久久伊人五月天 | 国产精品久久久久久久久蜜臀 | 亚洲天堂网在线播放 | 中文字幕丝袜制服 | 日本黄色免费播放 | 日韩三级视频 | 99色在线播放 | 日日夜夜网 | 99精品国产一区二区三区麻豆 | 亚州精品视频 | 中文字幕在线观看av | 超碰在线人人草 | 波多野结衣在线观看一区二区三区 | 九九热久久免费视频 | 丁香六月激情 | 国产一区在线精品 | 久久人人97超碰国产公开结果 | 国产精品免费大片视频 | 中文字幕不卡在线88 | 91视频com | 久99久精品 | 欧美九九视频 | 蜜桃av人人夜夜澡人人爽 | 久久久久一区二区三区四区 | 国产免费精彩视频 | 91免费看片黄 | av成人在线电影 | 久久国产美女 | 精品欧美小视频在线观看 | 国产日产精品一区二区三区四区 | 狠狠的日日 | 夜色.com | 啪啪免费视频网站 | 国产精品va在线观看入 | 久久伦理 | 亚洲一二视频 | 四虎影视精品成人 | 国产精品久久久久久妇 | 三级黄色网络 | 在线观看视频国产 | 国产91丝袜在线播放动漫 | 婷婷午夜激情 | 涩涩网站在线看 | 欧美少妇xx | 97超碰在线资源 | 黄色毛片视频免费 | 最新成人在线 | 韩日精品在线 | 国产欧美精品一区二区三区 | 中文字幕第一页在线播放 | 四虎影视精品永久在线观看 | 欧美日韩一区二区在线 | 国产青草视频在线观看 | 欧美极度另类性三渗透 | 国产精品一区二区在线免费观看 | 91免费的视频在线播放 | 不卡精品 | 欧美吞精 | 中文字幕乱视频 | 黄色大片国产 | 亚洲不卡av一区二区三区 | 夜夜躁日日躁狠狠躁 | 午夜av一区二区三区 | 亚州欧美视频 | 国产免费一区二区三区网站免费 | 国产成人综 | 黄色一二级片 | 国产99久久精品一区二区300 | 九九九九热精品免费视频点播观看 | 免费网站在线观看人 | 久久综合激情 | 日一日操一操 | 国产成人专区 | 成人黄视频 | 玖玖爱在线观看 | 国内精品在线看 | 亚洲国产精品推荐 | 日本乱码在线 | 亚洲成人av免费 | 国产精品视频在线看 | www.成人久久 | 国产精品一区二区三区四 | 久久久久久久久久网 | 国产精品一区二区电影 | 国产91aaa| 亚洲国产欧美在线人成大黄瓜 | 日韩午夜大片 | 免费试看一区 | 九九热视频在线免费观看 | 黄色国产在线 | 欧美日韩69 | 国内丰满少妇猛烈精品播放 | 91精品在线免费 | 97视频人人澡人人爽 | 成人免费视频a | 午夜视频在线瓜伦 | 国产一区二区三区 在线 | 久久久久久久电影 | 日韩在线视频线视频免费网站 | 国产精品99久久久久久久久 | 激情欧美国产 | 韩国三级av在线 | 91av中文字幕 | 国产在线国偷精品产拍免费yy | 日韩免费在线观看 | 日韩激情一二三区 | 日韩精品久久久久久中文字幕8 | 99精品欧美一区二区三区黑人哦 | 国产精品丝袜在线 | 四虎成人精品 | 日韩欧美视频免费观看 | 亚洲免费婷婷 | 91| 五月天视频网 | 中文字幕av电影下载 | 日韩剧情 | 亚洲国产欧美一区二区三区丁香婷 | 国产又粗又猛又色又黄视频 | 五月婷激情| 久久久久久久国产精品影院 | 国精产品满18岁在线 | 国产一级在线 | 最新精品视频在线 | 亚洲永久字幕 | 国产精品不卡 | 国产精品免费麻豆入口 | 国产视频18| 丁香婷婷激情国产高清秒播 | 在线免费日韩 | 久久99久国产精品黄毛片入口 | 综合久色| 亚洲精品中文在线观看 | 中文字幕有码在线播放 | 免费三级黄色片 | 香蕉免费在线 | 亚洲资源在线网 | 久久福利小视频 | 日韩一区二区三区视频在线 | 91久久精品日日躁夜夜躁国产 | 亚洲高清不卡av | 国产一区网 | 麻豆视频免费在线观看 | 国产不卡一 | 黄色1级毛片 | 国产高清在线免费 | 免费成人短视频 | 99久久婷婷国产精品综合 | 日韩一区二区三区高清免费看看 | 干天天| 人人爽人人爱 | 日韩免费一区 | 欧美精品乱码久久久久久 | www.天天色 | 成人网看片 | 日本韩国精品一区二区在线观看 | 久久视频这里只有精品 | 天天射天天拍 | 青春草视频在线播放 | 黄污视频大全 | 美女国内精品自产拍在线播放 | 免费看国产精品 | 天天天干天天天操 | 日日干网 | 成人一级免费电影 | 久久tv| 久草免费资源 | 正在播放 久久 | 91chinese在线 | 伊人干综合 | 免费国产在线精品 | 欧美日韩69| 五月综合激情网 | 草莓视频在线观看免费观看 | 亚洲成a人片77777kkkk1在线观看 | 99精品免费久久久久久久久 | 中文字幕亚洲情99在线 | 亚洲视频久久久 | 视频在线观看国产 | 天天曰天天干 | 欧美成人播放 | www黄| av资源中文字幕 | 亚洲精品视频在线观看免费视频 | 日韩国产精品一区 | 在线免费观看黄色av | 国产精品99久久久 | 激情在线网址 | 中文字幕av在线播放 | 香蕉视频日本 | 日本婷婷色 | 麻花豆传媒mv在线观看 | 伊人天天操 | 中文字幕在线观看第二页 | 日本公乱妇视频 | 超薄丝袜一二三区 | 国产九九精品 | 亚洲另类xxxx | 色天天中文 | 日韩中文字幕网站 | 亚洲国产精品成人精品 | 久久精品99国产 | 五月天激情在线 | 99视频免费看 | 国产福利91精品一区二区三区 | 91色九色 | 高清色免费 | 婷婷四房综合激情五月 | 国产又粗又猛又黄又爽视频 | 婷婷网站天天婷婷网站 | 久久的色 | 中文字幕视频网站 | 国产亚洲无 | 国产成人99久久亚洲综合精品 | 国产色女人 | 久久99亚洲精品 | 国产美女免费 | 天天干天天色2020 | 天天爱天天操天天射 | 青青久草在线视频 | 日韩精品中文字幕av | 日韩高清网站 | 波多野结衣电影一区 | 中文字幕日韩电影 | 香蕉久久久久久av成人 | 日日干天天 | 91av免费看| 在线免费黄色av | 亚洲人在线7777777精品 | 日韩在线中文字幕 | 免费看v片网站 | 国产中文字幕第一页 | 国产999在线 | 日韩日韩日韩日韩 | 久久久久亚洲精品国产 | 久久久免费观看视频 | 国产色小视频 | 人人舔人人爱 | 欧美精品一区在线发布 | 日韩精品不卡在线 | 91精品国产99久久久久 | 国产美女精品 | 99久久精| 国产精品一区在线播放 | 男女全黄一级一级高潮免费看 | av中文在线播放 | 国产精品久久久精品 | 黄色毛片一级 | 999久久久欧美日韩黑人 | 在线视频亚洲 | 麻豆久久精品 | 国产不卡av在线播放 | 日日操夜夜操狠狠操 | 99中文字幕| 奇米网网址 | 黄色在线观看www | 久操视频在线免费看 | 成人香蕉视频 | 免费在线观看午夜视频 | 日日夜夜精品免费视频 | 国产精品综合久久久久 | 最新日韩在线 | 国产涩涩在线观看 | 91中文在线视频 | 人人涩| 国产日韩精品一区二区三区 | 国产 一区二区三区 在线 | 高清av免费看 | av动图| 亚洲年轻女教师毛茸茸 | 狠狠色丁香久久婷婷综 | 色就是色综合 | 精品国产一区二区三区日日嗨 | 欧美精品三级 | 在线播放精品一区二区三区 | 五月天激情婷婷 | va视频在线观看 | 少妇搡bbbb搡bbb搡忠贞 | 亚洲国产影院av久久久久 | 国产福利一区二区三区在线观看 | 国产日韩欧美在线 | 91黄色小网站 | 91精品亚洲影视在线观看 | 蜜臀av夜夜澡人人爽人人 | 高清久久久 | 国产一区二区三区高清播放 | 久久国产二区 | 中文日韩在线视频 | 久久伊人精品天天 | 国产欧美综合在线观看 | 久久字幕精品一区 | 亚州激情视频 | 69国产精品视频免费观看 | 黄色a一级片 | 国模吧一区 | 中文字幕在线国产 | 黄色日本片 | 超碰在线98 | 99精品视频在线观看视频 | 黄色特级毛片 | www.色午夜.com| 丁香视频全集免费观看 | www国产精品com | 国产精品久久久 | 日韩免费看片 | 国产真实精品久久二三区 | 色久五月| 欧美va天堂va视频va在线 | av观看免费在线 | 久久久久久久久久久久久国产精品 | 国产在线自 | 久草综合在线观看 | 久久久一本精品99久久精品 | 日韩一级精品 | 日韩xxxx视频| 欧美精品久久人人躁人人爽 | 国产精品18久久久久久久久久久久 | 国产尤物在线视频 | 一区二区中文字幕在线观看 | 精品99999| 午夜精品久久久 | 免费看成年人 | 国产精品久久久久婷婷 | 99精品视频在线观看播放 | 午夜精品成人一区二区三区 | 成人a级免费视频 | 久久精品国产成人精品 | 国产日产精品一区二区三区四区的观看方式 | 日韩欧美网址 | 黄污网站在线观看 | 久久久久国产精品视频 | 一区二区三区在线观看中文字幕 | 中文字幕在线影院 | 综合网天天射 | 欧美日韩二三区 | 中文字幕最新精品 | 四虎永久视频 | 中文字幕人成不卡一区 | 成人中文字幕在线观看 | 西西444www高清大胆 | 日韩剧情 | 久久久www成人免费毛片 | 色综合天天综合网国产成人网 | 91色国产在线 | 视频一区亚洲 | 国产精品视频免费在线观看 | 亚洲精品99久久久久久 | 这里只有精品视频在线观看 | 二区中文字幕 | 九九在线高清精品视频 | 国产麻豆剧果冻传媒视频播放量 | 国产精品亚洲人在线观看 | 亚洲免费av在线播放 | 日韩在线视频网 | 夜夜操狠狠操 | 亚洲精品美女久久 | 免费在线观看黄 | 日韩色中色 | 国产综合视频在线观看 | 日韩久久精品一区二区 | 97福利在线观看 | 日本午夜在线观看 | 99精品视频在线观看 | 91九色性视频 | 成人国产精品久久久久久亚洲 | 国产91精品一区二区麻豆网站 | www亚洲国产| 欧美精品免费在线观看 | 日韩av免费在线看 | 中文字幕精品视频 | 三级黄色大片在线观看 | 91精品国产亚洲 | 在线欧美最极品的av | 免费看黄色毛片 | 在线观看91 | 久久综合在线 | 亚洲成人资源网 | 国产成人黄色 | 日韩黄色免费 | 在线播放日韩 | 国产精品视频最多的网站 | 国产手机在线 | 在线观看精品黄av片免费 | 成人免费在线网 | av中文字幕不卡 | 日韩大片在线免费观看 | 激情五月婷婷综合网 | 亚洲成人av一区二区 | 在线天堂v | 少妇18xxxx性xxxx片 | 欧美另类高清 | 91亚洲欧美激情 | 爱爱一区| 超碰在线亚洲 | 天天色视频 | 黄色一级影院 | 久草视频视频在线播放 | 91免费国产在线观看 | 精品毛片在线 | 精品一区 在线 | 欧美日韩免费一区 | 91最新网址 | 中文字幕av在线不卡 | 麻豆成人网 | 丁香六月五月婷婷 | 国产日韩欧美综合在线 | 婷婷丁香综合 | av爱干| 国产成人在线一区 | 五月天色婷婷丁香 | 国产流白浆高潮在线观看 | 久久国产精品偷 | 色全色在线资源网 | 国产99在线播放 | 天天操夜夜操国产精品 | 久久在线播放 | 欧美一级片免费播放 | 欧美伦理一区二区三区 | 午夜色性片 | 激情丁香综合 | 97碰碰碰 | 精品免费国产一区二区三区四区 | 欧美在线视频免费 | 丁香五月亚洲综合在线 | 超碰在线94| 国产又粗又长的视频 | 亚洲日本在线视频观看 | 狠狠操狠狠干天天操 | 国产一级高清 | 西西444www大胆高清图片 | 国产精品综合av一区二区国产馆 | 国产精品黄网站在线观看 | 在线 国产一区 | 亚洲天堂网在线视频观看 | 亚洲国产成人久久综合 | 国产大片黄色 | 97国产在线 | 欧美激情视频在线免费观看 | 欧美成人影音 | 66av99精品福利视频在线 | 成人香蕉视频 | 九九天堂 | 国产精品正在播放 | 99精品视频在线看 | 久草视频在线资源站 | 亚洲在线a | 精品国模一区二区三区 | 97在线影视| 超碰国产在线观看 | 五月婷婷视频在线观看 | 亚洲午夜大片 | 久久精品视频在线免费观看 | 五月丁色 | 在线小视频国产 | 永久免费在线 | 久久精品系列 | 国产做aⅴ在线视频播放 | 九草在线观看 | 欧美片一区二区三区 | 亚洲国产精品小视频 | 九九免费观看全部免费视频 | 丝袜美腿一区 | 九九免费在线视频 | 成人免费视频网 | 久久久久久久久久国产精品 | 成人a视频片观看免费 | 中文乱码视频在线观看 | 国产美女视频一区 | 在线免费观看不卡av | 中文理论片 | 91三级在线观看 | 国产一区视频免费在线观看 | 欧美日韩一区二区三区免费视频 | 免费观看成人网 | 波多野结衣在线观看一区二区三区 | 97精品在线 | 久久人人97超碰com | 天天看天天操 | 久久一区国产 | 一区二区在线电影 | 成人免费观看av | 日韩.com| 久草在线视频资源 | 欧洲一区二区在线观看 | 色wwww| 啪啪动态视频 | 中文字幕精品在线 | 国产一级免费在线观看 | 欧美激情视频免费看 | 美女久久网站 | 午夜久久福利视频 | 免费日韩高清 | 久久艹艹 | 成人资源在线观看 | 在线观看mv的中文字幕网站 | 免费婷婷 | 日韩成人免费在线 | 日本在线精品视频 | 日韩视频免费观看高清完整版在线 | 在线久久 | 99久国产 | 97视频网址 | 日韩性xxx| 欧美一区二区三区特黄 | 国产小视频在线 | 天天色天 | 久久综合免费视频影院 | 久久精品一区二区三区四区 | 久久视频网址 | 去干成人网 | 色婷婷亚洲婷婷 | 夜夜操狠狠干 | 日本久久成人 | 97碰在线 | 在线观看激情av | 天天干天天干天天 | 在线 日韩 av | 看v片 | 欧美最新大片在线看 | 999毛片 | 久久久久久久18 | 日韩美女高潮 | 国产乱码精品一区二区三区介绍 | 992tv成人免费看片 | 成人一级黄色片 | 国产精品日韩高清 | 青青五月天 | 国产精品激情 | 啪啪av在线 | 久久精品视频在线 | 国产精品18久久久久白浆 | 欧美日韩高清一区二区三区 | 日本在线免费看 | 99麻豆久久久国产精品免费 | 91夫妻自拍 | 国产在线日韩 | 91视频专区 | 成人a在线观看 | 日日爽天天爽 | 久久精品中文字幕一区二区三区 | 久久躁日日躁aaaaxxxx | 在线国产一区二区三区 | 狠狠伊人 | 日韩精品中文字幕在线不卡尤物 | 中文字幕国产精品一区二区 | 日本高清xxxx | 97国产精品 | 欧美日韩在线精品一区二区 | 人人干97| 久久www免费人成看片高清 | 在线午夜av| 五月婷av | 91自拍视频在线 | 免费日韩电影 | 色99视频| 国产专区在线 | 免费成视频 | 成人国产在线 | 激情五月五月婷婷 | h视频在线看 | 国产护士hd高朝护士1 | 国产成人精品一区二三区 | 成人影片在线免费观看 | 日韩欧美在线免费 | 日韩精品一区电影 | 色网站在线看 | 丁香激情综合久久伊人久久 | 激情五月婷婷激情 | 日韩毛片在线免费观看 | 色国产精品一区在线观看 | 在线免费黄色av | 国产成人精品一区二区三区免费 | 久久久久久久久久久网 | 综合久久久久 | 三级视频片 | 精品国产免费观看 | 免费成人在线网站 | 欧美极品xxxxx | 三上悠亚在线免费 | 狠狠干夜夜爱 | 成年人视频免费在线播放 | 日韩欧美黄色网址 | 久久xx视频 | 国产一区在线免费观看 | 午夜久久网| 三级av在线播放 | 久久永久视频 | 欧美a级在线免费观看 | 日韩在线观看网址 | 中文字幕在线观看完整版 | 久久免费视频在线观看30 | 欧美激情片在线观看 | 国产成人av网站 | 探花视频在线观看 | 日韩在线色视频 | 久久综合狠狠综合久久综合88 | 日韩av五月天 | 精品久久久久久亚洲综合网站 | 中文字幕免费高清在线观看 | 日韩免费在线网站 | 成人黄色电影在线 | 亚洲免费公开视频 | 日韩电影在线观看一区二区三区 | 在线观看免费色 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 国产中文字幕视频在线 | 日韩av片在线 | 97精品国产91久久久久久 | 激情视频区 | 久久久久免费网 | 国产一区免费在线 | 久久久久 | 韩国三级av在线 | 成人久久| 日韩av成人 | 午夜精品久久久久久久久久久久 | 国产精品免费观看视频 | 久草视频在线资源站 | 91精品免费在线视频 | 99久视频| 69亚洲视频 | 国产一级精品绿帽视频 | 伊人亚洲综合网 | 成人日批视频 | 99c视频高清免费观看 | 久久久久久麻豆 | 黄色免费网站 | 久久精品综合 | 久久99久国产精品黄毛片入口 | 亚洲在线视频播放 | 成人免费一区二区三区在线观看 | 国产在线观看黄 | av动图| 精品欧美一区二区精品久久 | 色福利网 | 国内精品久久久久影院一蜜桃 | 天堂av网址| 黄色毛片电影 | 国产精品99精品 | 国产成人一区二 | 国产一区网址 | 亚洲成人网av | 2024国产精品视频 | 久久成人精品视频 | 成人性生交大片免费看中文网站 | 色视频在线免费观看 | 韩日在线一区 | 粉嫩aⅴ一区二区三区 | 亚洲电影av在线 | 97超碰人人澡人人爱学生 | av无限看| 粉嫩av一区二区三区免费 | 超碰在线天天 | 国产美女在线观看 | 911国产 | 国产中文字幕一区二区三区 | 亚洲视频www | 日韩3区 | 久久久久久久久久久网 | 狠狠躁夜夜躁人人爽视频 | 最新国产福利 | 麻豆视传媒官网免费观看 | 99精品偷拍视频一区二区三区 | 毛片黄色一级 | 国产98色在线 | 日韩 | av久久在线| 国产一区精品在线 | 欧美午夜精品久久久久久浪潮 | 国产三级视频 | 中文字幕日韩电影 | 久久色在线播放 | 国产精品久久久久久久久久新婚 | 日韩欧美在线视频一区二区 | 亚洲九九九 | 国产亚洲午夜高清国产拍精品 | 色视频网站免费观看 | av高清在线观看 | 日本精品视频一区二区 | 中文字幕资源在线 | www.888.av | 中文字幕在线观看视频一区二区三区 | 久久精品三级 | 五月婷婷六月丁香 | 不卡的av片 | 婷婷www| av一级片网站 | 91视频在线自拍 | 国产成人精品国内自产拍免费看 | 伊人手机在线 | 久久久久99999 | 日韩亚洲欧美中文字幕 | 最近免费中文字幕 | 日韩69视频| 三级黄色理论片 | 97爱| 色吧久久 | 日韩精品视频网站 | 国产精品成人a免费观看 | 亚洲精品午夜久久久久久久久久久 | 99久久成人 | 久久黄色免费 | 99国产精品免费网站 | 国产精品丝袜 | 欧美在线观看视频一区二区三区 | 狠狠色丁香婷婷综合久久片 | 狠狠色狠狠色综合系列 | 免费中文字幕在线观看 | 日本不卡一区二区三区在线观看 | 天天干com | 国产一区二区在线免费播放 | 天天透天天插 | 伊人小视频 | 午夜视频在线观看网站 | 超碰人人草 | 97超碰人人| 日日激情 | 91在线精品一区二区 | 中文字幕一区二区三区四区久久 | 深夜免费福利网站 | 91女神的呻吟细腰翘臀美女 | 日日爽天天操 | av高清影院 | 日韩精品无码一区二区三区 | 日韩欧美在线免费观看 | 香蕉视频国产在线 | 狠狠色狠狠综合久久 | 亚洲婷婷伊人 | 香蕉视频在线免费 | 久久久久久在线观看 | 狠狠操影视 | 国产色小视频 | 韩国视频一区二区三区 | 日韩视频一区二区三区 | 久草视频免费播放 | 岛国av在线 | 国产一区二区不卡视频 | 欧美大片大全 | 五月天伊人网 | 免费av网址在线观看 | 国产在线播放一区二区三区 | 日日干网| 日韩中文字幕在线 | 夜夜躁日日躁狠狠久久88av | 日批在线观看 | 精品久久久精品 | 激情五月亚洲 | 亚洲欧美日韩国产精品一区午夜 | 亚洲涩涩一区 | 免费97视频 | 日韩性xxx| 国产999精品久久久 免费a网站 | 精品视频一区在线观看 | 成人免费视频网站 | 亚洲成人黄色av | 一区二区三区四区在线 | 五月婷网 | 不卡视频一区二区三区 | 久久婷亚洲五月一区天天躁 | 樱空桃av | 国产专区在线播放 | 国产精品久久在线观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 久久久久久久久免费视频 | 日本午夜免费福利视频 | 亚洲精品久久久久久国 | 亚洲精品中文在线资源 | 日韩在线电影一区二区 | 亚洲午夜精品一区 | 男女啪啪视屏 | av资源免费在线观看 | 福利视频一区二区 | 香蕉视频免费在线播放 | 久久福利国产 | 午夜精选视频 | 手机色在线 | 欧美性生活大片 | 国产视频一区二区在线观看 | 欧美视频网址 | 天天干,天天操,天天射 | 在线观看中文字幕网站 | 九九热国产视频 | 激情综合五月婷婷 | 狠狠躁日日躁狂躁夜夜躁av | av在线电影免费观看 | 麻豆久久精品 | 日韩精品中文字幕一区二区 | 国产精品毛片久久久 | 亚洲精品综合一二三区在线观看 | 91色国产| 婷婷丁香国产 | 伊人永久 | 2019av在线视频 | 亚洲成av人片在线观看 | 波多野结衣亚洲一区二区 | 99久久综合国产精品二区 | 日韩成人欧美 | 成人在线黄色电影 | 日韩av中文在线观看 | 国产午夜精品视频 | 婷婷久操 | 日本精a在线观看 | 免费高清国产 | 视频高清 | 天天操天天射天天 | 久久久精品久久日韩一区综合 | 久久精品高清视频 | 日韩mv欧美mv国产精品 | 色综合咪咪久久网 | 91精品老司机久久一区啪 | 99精品欧美一区二区蜜桃免费 | 91亚州 | 天天爱天天射天天干天天 | 久草视频在线观 | 日韩一区二区三区在线看 | av中文字幕在线免费观看 | 精品国产亚洲日本 | 免费高清在线观看成人 | 人人搞人人爽 | 成人久久18免费网站麻豆 | 国产精久久久久久妇女av | 免费高清在线观看电视网站 | 二区三区在线观看 | 国产免费亚洲 | 亚洲一区日韩 | 黄色国产大片 | 激情综合狠狠 | 国产高清一级 | 男女视频国产 | 欧美性爽爽 | 日韩在线视频一区 | 99热国产精品 | 激情 一区二区 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 天天操综| 成人精品一区二区三区电影免费 | 色综合色综合久久综合频道88 | 成人资源在线观看 | 欧美一级片| 久久久久久久久久久高潮一区二区 | 日韩中文字幕视频在线观看 | 色综合网 | 久久美女高清视频 | 91成人免费 | 在线精品一区二区 | 少妇自拍av| 伊人婷婷综合 | 五月婷婷综合色拍 | 国产精品一区二区三区免费视频 | 久久久影片 | 欧美日韩精品在线视频 | 九九影视理伦片 | 中文字幕成人在线 | 亚洲三级黄色 | 91亚洲国产成人 | 伊人av综合 | 国产成人1区 | 久久久久久综合 | av高清在线 | 欧美日韩高清一区 | 欧美成人999 | 91污视频在线观看 | 在线看黄色的网站 | 国产一区二区高清不卡 | 免费看成人片 | 黄色看片 | 国产清纯在线 | 日韩久久精品 | 69视频在线 | 国产精品 中文字幕 亚洲 欧美 | 亚洲成a人片77777kkkk1在线观看 | 亚洲成熟女人毛片在线 | 久久激情综合网 | 欧美激情视频三区 | 亚州精品一二三区 | 日韩免费一二三区 | 四虎永久免费在线观看 | 国产精品一区在线播放 | 中文av免费| 国产精品毛片一区二区在线看 | 色网站中文字幕 | 又黄又爽又湿又无遮挡的在线视频 | 欧美性黄网官网 | 中文高清av | 在线综合 亚洲 欧美在线视频 | 狠狠色丁香婷婷综合欧美 | 欧美福利视频一区 | 丁香激情综合 | 又湿又紧又大又爽a视频国产 | 在线免费黄色av | 在线免费看黄色 | 婷婷精品国产一区二区三区日韩 | 亚洲高清在线精品 | 久久a级片 | 欧美精品久久人人躁人人爽 | 国产午夜精品免费一区二区三区视频 | 日韩av资源在线观看 | 欧美久久久影院 | 婷婷在线网 | 中文字幕日韩有码 | 日韩精品综合在线 | 人人模人人爽 | 国产精品久久久一区二区三区网站 | 国产精品黄色 | 三级黄色免费片 | 久久久国产一区二区三区四区小说 | 又黄又爽又色无遮挡免费 | 二区三区在线观看 | 日韩一区二区在线免费观看 | 久久成人国产精品免费软件 | 日韩久久视频 | 久久精品国产美女 | 色综合天天狠天天透天天伊人 | 激情xxxx | 丁香花中文在线免费观看 | 91精品色| 国产高清视频免费最新在线 | 亚洲另类久久 | 毛片永久新网址首页 | 中文字幕在线观看视频一区 | 爱爱av网| 在线视频99 | 日韩影片在线观看 | 久草热久草视频 | 在线不卡的av | 国产成人精品999 | 日本精品免费看 | 天天综合五月天 | 久久精品国产精品亚洲 | 麻豆视频国产在线观看 | 亚洲视频1 | 人人超碰人人 | 最近中文字幕高清字幕在线视频 | 色wwwww| 一区 二区 精品 | 九色91av | 色婷婷激情电影 | 亚洲人成在线观看 | 97视频总站 | 欧美男男tv网站 | 国产精品久久99精品毛片三a | 亚洲精品国产精品国自产 | 一区二区三区四区久久 | 中文字幕第 | 亚洲h视频在线 | 美女视频a美女大全免费下载蜜臀 | 久草在 | 欧美日韩一区二区三区免费视频 | 97碰碰精品嫩模在线播放 | 免费高清在线视频一区· | 日韩乱码中文字幕 | 久久不见久久见免费影院 | 欧美a√大片 | 国产成人黄色 | 91成人在线免费观看 | 色婷婷狠狠18 | 亚洲一区二区视频在线播放 | 青青河边草免费视频 | 992tv人人网tv亚洲精品 | 97超碰人人爱 | 国产精品成人一区二区三区 | 91av欧美| www.五月婷婷 | 91精品日韩 | 最近最新中文字幕视频 | 亚洲国产精品成人精品 | 亚洲精品天天 | av成人在线网站 | 在线免费视频你懂的 | 国产精品美女久久久久久久 | 婷婷色网视频在线播放 | 久久精品网站视频 | 黄色av成人在线观看 | 婷婷久月| 久久色亚洲 | 日韩av电影免费观看 | 狠狠色噜噜狠狠狠狠 | 久久综合色天天久久综合图片 | 综合在线色 | 四虎在线免费 | 午夜久久久久 | 国产黄色片在线 | 在线观看免费国产小视频 | 天天艹天天爽 | 国产日韩精品一区二区三区 | 精品视频在线看 | 综合伊人久久 | 伊人电影天堂 | 国产剧情一区二区在线观看 | 免费在线一区二区 | 久久免费激情视频 | 中文字幕视频三区 | 在线蜜桃视频 |