精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

圖形編輯器開發:一些會用到的簡單幾何算法

開發 后端
開發圖形編輯器,你會經常要解決一些算法問題。本文盤點一些我開發圖形編輯器時常用到的簡單幾何算法。

大家好,我是前端西瓜哥。

開發圖形編輯器,你會經常要解決一些算法問題。本文盤點一些我開發圖形編輯器時常用到的簡單幾何算法。

矩形碰撞檢測

判斷兩個矩形是否發生碰撞(或者說相交),即兩個矩形有重合的區域。

常見使用場景:

使用選擇工具框選圖形(框選策略除了相交,還可以用相交或其他方案)。

遍歷圖形,通過判斷視口矩形和圖形包圍盒的矩形碰撞,剔除掉視口外的圖形渲染操作,提高性能。

export function isRectIntersect2(rect1: IBox2, rect2: IBox2) {
  return (
    rect1.minX <= rect2.maxX &&
    rect1.maxX >= rect2.minX &&
    rect1.minY <= rect2.maxY &&
    rect1.maxY >= rect2.minY
  );
}

關于 IBox2 為包圍盒的接口簽名:

interface IBox2 {
  minX: number;
  minY: number;
  maxX: number;
  maxY: number;
}

矩形包含檢測

該算法用于判斷矩形 1 是否包含矩形 2。

常見使用場景:

使用選擇工具框選圖形(這次用的是包含策略);

function isRectContain2(rect1: IBox2, rect2: IBox2) {
  return (
    rect1.minX <= rect2.minX &&
    rect1.minY <= rect2.minY &&
    rect1.maxX >= rect2.maxX &&
    rect1.maxY >= rect2.maxY
  );
}

計算旋轉后坐標

對圖形旋轉,是一個非常基礎的功能。計算旋轉后的點是很常見的需求。

常見使用場景:

  • 計算包圍盒旋轉后的坐標,繪制縮放控制點。
  • 計算光標位置是否落在一個旋轉的矩形上,因為旋轉的矩形并不是一個正交的矩形,計算出來后判斷有點復雜。所以通常我們會將光標給予矩形的中點反過來旋轉一下,然后判斷點是否在矩形中。

用到三角函數算法。

const transformRotate = (
  x: number,
  y: number,
  radian: number,
  cx: number,
  cy: number,
) => {
  if (!radian) {
    return { x, y };
  }
  const cos = Math.cos(radian);
  const sin = Math.sin(radian);
  return {
    x: (x - cx) * cos - (y - cy) * sin + cx,
    y: (x - cx) * sin + (y - cy) * cos + cy,
  };
}

點是否在矩形中

常見使用場景:

用于實現圖形拾取,判斷矩形圖形或包圍盒是否在光標位置上。

function isPointInRect(point: IPoint, rect: IRect) {
  return (
    point.x >= rect.x &&
    point.y >= rect.y &&
    point.x <= rect.x + rect.width &&
    point.y <= rect.y + rect.height
  );
}

多個矩形組成的大矩形

選中多個矩形時,要計算它們組成的大矩形,然后繪制出大選中框。

function getRectsBBox(...rects: IRect[]): IBox {
  if (rects.length === 0) {
    throw new Error('the count of rect can not be 0');
  }

  const minX = Math.min(...rects.map((rect) => rect.x));
  const minY = Math.min(...rects.map((rect) => rect.y));
  const maxX = Math.max(...rects.map((rect) => rect.x + rect.width));
  const maxY = Math.max(...rects.map((rect) => rect.y + rect.height));

  return {
    x: minX,
    y: minY,
    width: maxX - minX,
    height: maxY - minY,
  };
}

這里用的是另一種包圍盒子的表達,所以多了一層轉換。

interface IRect = {
  x: number;
  y: number;
  width: number;
  height: number;
}

type IBox = IRect

計算向量夾角

通過旋轉控制點旋轉圖形時,需要通過向量的點積公式來計算移動的夾角,去更新圖形的旋轉角度。

計算 [x - cx, y - cy] 和 [0, -1] 兩個向量夾角的算法實現:

/**
 * 求向量到右側軸(x正半軸)的夾角
 * 范圍在 [0, Math.PI * 2)
 */
export function calcVectorRadian(cx: number, cy: number, x: number, y: number) {
  const a = [x - cx, y - cy];
  const b = [0, -1];

  const dotProduct = a[0] * b[0] + a[1] * b[1];
  const d =
    Math.sqrt(a[0] * a[0] + a[1] * a[1]) * Math.sqrt(b[0] * b[0] + b[1] * b[1]);
  let radian = Math.acos(dotProduct / d);

  if (x < cx) {
    radian = Math.PI * 2 - radian;
  }
  return radian;
}

結尾

做圖形編輯器,經常要和幾何算法打交道,各種相交判斷、居中計算、光標縮放、找最近的參照線等等。

這對算法能力有一定要求的,建議多去刷刷 leetcode。此外就是多畫圖分析。

在開發中,我們還要自己去分析需求,結合圖形編輯器的具體實現,抽離出算法問題,并配合合適的數據結構,去解題。解法可能一次不是最優解, 但我們可以慢慢迭代,慢慢優化的。

雖然有點耗腦細胞,但最后把難題解決,還是非常有成就感。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2022-08-28 23:51:04

編輯器vim代碼

2023-10-19 10:12:34

圖形編輯器開發縮放圖形

2023-09-26 07:39:21

2009-12-02 16:02:58

VS2010編輯器

2023-09-07 08:24:35

圖形編輯器開發繪制圖形工具

2023-08-31 11:32:57

圖形編輯器contain

2023-10-08 08:11:40

圖形編輯器快捷鍵操作

2024-01-08 08:30:05

光標圖形編輯器開發游標

2023-09-11 09:02:31

圖形編輯器模塊間的通信

2023-04-07 08:02:30

圖形編輯器對齊功能

2023-01-18 08:30:40

圖形編輯器元素

2023-02-01 09:21:59

圖形編輯器標尺

2023-10-10 16:04:30

圖形編輯器格式轉換

2023-08-28 08:10:50

Hex圖形編輯器

2018-06-29 10:52:07

PythonIDE編輯器

2023-06-12 08:22:56

圖形編輯器工具

2023-07-07 13:56:01

圖形編輯器畫布縮放

2024-01-03 08:43:17

圖形編輯器旋轉控制點縮放控制點

2023-04-10 08:45:44

圖形編輯器排列移動功能

2023-07-31 08:46:07

圖形編輯器圖形自動對齊
點贊
收藏

51CTO技術棧公眾號

欧美三级电影在线| 蜜桃麻豆影像在线观看| 国产一区在线观看麻豆| 欧美激情国产精品| 精品成人av一区二区三区| 精品176极品一区| 亚洲国产成人91porn| 日本一区视频在线观看免费| 精品毛片在线观看| 久久精品人人| 欧美激情免费看| 日本成人免费视频| 日本久久伊人| 色94色欧美sute亚洲线路一久| 日本女人高潮视频| 欧美男男同志| 成人一区二区三区中文字幕| 国产人妖伪娘一区91| 国产成人免费看| 欧美不卡高清| 国产亚洲欧美日韩美女| 国产高潮视频在线观看| 国产精品成人**免费视频| 色综合久久88色综合天天| 国产精品免费看久久久无码| yw视频在线观看| 91在线一区二区三区| 亚洲va电影大全| 制服丝袜在线一区| 美女精品一区| 91精品国产色综合| 欧美三根一起进三p| 日韩久久久久| 尤物九九久久国产精品的特点 | 亚洲欧美精品一区二区| 亚洲精品无码一区二区| 超碰国产精品一区二页| 欧美性感一类影片在线播放| 大j8黑人w巨大888a片| 色呦呦在线视频| 亚洲精品乱码久久久久久久久| 亚洲人成网站在线观看播放| 黄色软件在线观看| 久久久久久久久久看片| 蜜桃免费一区二区三区| 视频一区 中文字幕| 成人午夜在线视频| 国产日韩精品久久| 亚洲成人777777| 国产精品1区2区3区| 91夜夜揉人人捏人人添红杏| 99国产精品久久久久久久成人 | 久久涩涩网站| 五月激情六月婷婷| 久久综合99re88久久爱| 久久综合九色99| 麻豆导航在线观看| 久久精子c满五个校花| 欧美日韩精品不卡| 国产区视频在线| 国产精品麻豆视频| 一区二区三区四区欧美日韩| 麻豆视频在线免费观看| 亚洲啪啪综合av一区二区三区| 成人性做爰片免费视频| 色屁屁www国产馆在线观看| 亚洲一区精品在线| 日韩精品 欧美| 美女一区网站| 欧美日韩一区久久| 熟妇无码乱子成人精品| 国产乱人伦丫前精品视频| 日韩电视剧免费观看网站| 日本xxxxxxxxx18| 日韩影院二区| 欧美肥臀大乳一区二区免费视频| 日韩欧美亚洲视频| 日韩电影在线观看一区| 92看片淫黄大片看国产片| 男人天堂综合网| 久久久精品国产99久久精品芒果| 色大师av一区二区三区| 在线网址91| 欧美日韩亚洲成人| 亚洲欧美在线精品| 亚洲一二三区视频| 亚洲欧洲在线免费| 私库av在线播放| 久久欧美肥婆一二区| 91色视频在线导航| 深夜福利视频在线观看| 中文字幕在线不卡国产视频| 欧美黄色免费网址| 视频一区在线免费看| 日韩女优电影在线观看| 日本少妇高潮喷水xxxxxxx| 亚洲xxx拳头交| 国产91精品视频在线观看| 国产精品九九九九| 久久夜色精品国产噜噜av| 老司机av福利| 亚洲精品中文字幕| 日韩一区二区中文字幕| xxxxx在线观看| 狠狠入ady亚洲精品经典电影| 国产精品电影网| 婷婷在线免费视频| 亚洲品质自拍视频| 久久久精品麻豆| 欧美电影免费网站| 欧美成人午夜激情视频| 中文亚洲av片在线观看| 99国产精品一区| 国产一级大片免费看| av免费在线一区| 亚洲欧美www| 久久精品女人毛片国产| 国内精品伊人久久久久av一坑| 欧美下载看逼逼| 第一中文字幕在线| 欧美成人高清电影在线| 日韩欧美综合视频| 免费一级欧美片在线观看| 久久久影院一区二区三区| 美足av综合网| 日韩免费视频一区二区| 一级性生活免费视频| 日本成人在线不卡视频| 欧美久久在线| 一区一区三区| 精品在线观看国产| 日韩三级视频在线播放| 国产v综合v亚洲欧| 日韩中文字幕亚洲精品欧美| 久久精品嫩草影院| 日日摸夜夜添一区| 中文字幕欧美人妻精品一区蜜臀| 国产目拍亚洲精品99久久精品| 能在线观看的av| 亚洲大片精品免费| 国外成人性视频| 无码精品在线观看| 狠狠躁天天躁日日躁欧美| 天天插天天射天天干| 亚洲看片一区| 精品亚洲第一| 中文字幕资源网在线观看免费 | 黄色录像一级片| 另类综合日韩欧美亚洲| 一区二区精品免费视频| 欧美风情在线视频| 欧美xxxx14xxxxx性爽| 国产美女永久免费| 一区二区三区不卡在线观看| 中文字幕无码毛片免费看| 国产精品黄色| 久久国产一区二区| 欧美成人精品一区二区男人小说| 亚洲码在线观看| 波多野结衣绝顶大高潮| 国产精品久久久久久久久久免费看 | 欧美一区二区三区在线观看| 国内偷拍精品视频| www.日韩大片| 欧美精品无码一区二区三区| 久久国产成人精品| 成人免费午夜电影| 女人天堂av在线播放| 亚洲黄色有码视频| 亚洲成人第一网站| 国产精品家庭影院| 日本在线不卡一区二区| 欧美亚洲网站| 在线观看一区二区三区三州| 亚洲一区二区三区日本久久九| 欧美怡红院视频一区二区三区| www日韩tube| 日韩欧美一区二区免费| 精品国产免费观看| 国产精品午夜春色av| 野花视频免费在线观看| 先锋影音久久| 狠狠干视频网站| 亚洲人成亚洲精品| 91精品视频网站| 在线观看网站免费入口在线观看国内 | 亚洲综合在线一区二区| 亚洲激情在线| 一区一区视频| 日韩精品免费一区二区夜夜嗨 | 国产精品成人在线观看| 一级黄色片毛片| 蜜臀av在线播放一区二区三区| 国产日韩av网站| 日韩激情一区| 久久精品国产精品青草色艺| 99er精品视频| 国产精品91在线| 男插女视频久久久| 色播久久人人爽人人爽人人片视av| 性一交一乱一伧老太| 欧美在线观看18| 日韩一区二区视频在线| 亚洲黄网站在线观看| 97在线观看免费视频| 成人免费视频视频在线观看免费| 成人免费在线观看视频网站| 国产人成精品一区二区三| 黄色录像特级片| japanese国产精品| 久久er99热精品一区二区三区| 久久av网站| 国产精品视频在线观看| 亚洲天堂资源| 国内成人精品视频| 91国内在线| 久久久国产成人精品| 国产高清在线| 亚洲视频在线看| 天堂网av2014| 亚洲福利在线看| www.黄色一片| 欧美一区2区视频在线观看| 亚洲天堂久久久久| 欧美亚洲综合网| 成人av网站在线播放| 黄色精品一区二区| 久久久久久久久久久久久久久久久| 国产精品乱码一区二三区小蝌蚪| 女同毛片一区二区三区| 91香蕉视频污在线| 黄色短视频在线观看| 成人美女视频在线看| 人妻 丝袜美腿 中文字幕| 国产美女视频91| 国产免费中文字幕| 久久精品国产99久久6| 69久久久久久| 麻豆91精品91久久久的内涵| 岛国av在线免费| 蜜桃av一区二区三区| 亚洲少妇久久久| 麻豆国产一区二区| 一级黄色特级片| 九色综合国产一区二区三区| 欧美wwwwwww| 国产麻豆视频一区二区| xxxx国产视频| 成人av网站在线观看免费| av免费观看不卡| 99国产精品国产精品久久| 好吊色视频一区二区三区| bt7086福利一区国产| 欧美高清性xxxx| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩成人综合| 中文字幕av导航| 欧美日韩免费| 成人午夜精品久久久久久久蜜臀| 国产婷婷精品| 91香蕉视频污版| 久久国产精品99久久久久久老狼 | 综合亚洲自拍| 色女人综合av| 自拍视频亚洲| 免费看黄在线看| 日韩精品91亚洲二区在线观看| 色天使在线观看| 处破女av一区二区| aaaaa一级片| 最近日韩中文字幕| 国产一级做a爱免费视频| 五月天一区二区三区| 无码人妻精品一区二区50| 欧美剧情片在线观看| 黄片毛片在线看| 国产亚洲精品91在线| 污视频在线看网站| 57pao国产成人免费| 国产精品久久久久久妇女| 91精品天堂| 精品在线播放| wwwjizzjizzcom| 可以免费看不卡的av网站| 在线视频一二区| 久久亚洲综合色一区二区三区| 黄色精品视频在线观看| 亚洲成人免费av| 做爰无遮挡三级| 精品国产99国产精品| 在线免费观看黄色av| 久久久久久久电影一区| 亚洲天堂1区| 国产一区视频观看| 午夜精品毛片| 国产a视频免费观看| 国产激情视频一区二区在线观看| 国产精品成人一区二区三区电影毛片| ...xxx性欧美| 久久久国产免费| 亚洲成年人在线播放| 日韩精品黄色| 日韩av观看网址| caoporn成人免费视频在线| 亚洲人成网站在线观看播放| 亚洲综合国产激情另类一区| 青青草原播放器| 国产精品美女久久久久久| 天天爽夜夜爽夜夜爽精品| 日韩一卡二卡三卡国产欧美| 成人h小游戏| 日本道色综合久久影院| 一区二区精彩视频| 天堂av免费看| 蜜臀av一级做a爰片久久| 中文字幕xxx| 亚洲va天堂va国产va久| av综合在线观看| 日韩一区在线视频| 日本.亚洲电影| 欧美一区二区三区在线播放| 激情欧美亚洲| 乱码一区二区三区| 亚洲男人的天堂网| 一区二区三区播放| 在线视频中文亚洲| 欧美xnxx| 日本一区免费在线观看| 销魂美女一区二区三区视频在线| 国产高清成人久久| 亚洲在线观看免费| 亚洲国产精品欧美久久| 蜜臀久久99精品久久久无需会员 | 免费av网站大全久久| 日本精品在线观看视频| 色播五月激情综合网| 可以在线观看的黄色| 欧美一级淫片aaaaaaa视频| 日韩成人午夜| 久久人妻精品白浆国产| 久久综合国产精品| 精品无码一区二区三区的天堂| 亚洲美女视频网| xxxxxx欧美| 日本午夜精品一区二区| 日韩av一区二区三区四区| 亚洲女同二女同志奶水| 欧美日韩国产一级二级| 欧美三级黄网| 91久久精品国产91久久| 中文精品久久| 中文在线字幕观看| 精品福利樱桃av导航| 青青国产在线| 国产精品久久久久久久午夜 | 欧美极品少妇xxxxⅹ高跟鞋| 亚洲精品毛片一区二区三区| 中文字幕精品久久久久| 久久99精品久久久野外观看| 亚洲理论电影在线观看| 91蝌蚪国产九色| 中文无码精品一区二区三区| 久久久久北条麻妃免费看| 66精品视频在线观看| 久久久久久久久久久99| 久久久精品国产99久久精品芒果| 在线黄色av网站| 欧美精品午夜视频| 国产图片一区| 日本va中文字幕| 亚洲精品免费看| 四虎精品在线| 91精品国产综合久久香蕉922| 欧美私人啪啪vps| 精品人妻一区二区三区视频| 欧美日韩另类一区| 国产盗摄在线视频网站| 日本一区高清不卡| 国产精品一区免费在线观看| 激情五月色婷婷| 中文字幕综合在线| 风间由美性色一区二区三区四区| 不卡影院一区二区| 亚洲激情五月婷婷| 黄色的视频在线免费观看| 成人a级免费视频| 国产欧美日韩一区二区三区在线| 午夜黄色福利视频| 亚洲精品www久久久| 在线视频成人| 鲁一鲁一鲁一鲁一澡| 国产精品灌醉下药二区| 亚欧在线观看视频| 成人精品一区二区三区| 免费一区视频| 久久婷婷国产麻豆91| 亚洲性猛交xxxxwww| 国产欧美三级电影| 国产精品嫩草影院8vv8| 欧美性猛交xxxx久久久|