判断点在线的左边、右边

判断点在线的左边还是右边在构建三角网时是非常重要的

以及两点p1(x1,y1),p2(x2,y2),判断点p(x,y)在线的左边还是右边。

 

1.

bool LeftOfLine(const ZCoord2D& p, const ZCoord2& p1, const ZCoord2D& p2)

{

    double tmpx = (p1.x - p2.x) / (p1.y - p2.y) * (p.y - p2.y) + p2.x;

    if (tmpx > p.x)//当tmpx>p.x的时候,说明点在线的左边,小于在右边,等于则在线上。

        return true;
return false;
}

 

2.

另外一种方法:

Tmp = (y1 – y2) * x + (x2 – x1) * y + x1 * y2 – x2 * y1

Tmp > 0 在左侧

Tmp = 0 在线上

Tmp < 0 在右侧

 

3.

设线段端点为从 A(x1, y1)到 B(x2, y2), 线外一点 P(x0,y0),
判断该点位于有向线 A→B 的那一侧。 
a = ( x2-x1, y2-y1) 
b = (x0-x1, y0-y1) 
a x b = | a | | b | sinφ (φ为两向量的夹角) 
| a | | b |  ≠ 0 时,  a x b  决定点 P的位置 
所以  a x b  的 z 方向大小决定 P位置 
(x2-x1)(y0-y1) – (y2-y1)(x0-x1)  >  0   左侧 
(x2-x1)(y0-y1) – (y2-y1)(x0-x1)  <  0   右侧 
(x2-x1)(y0-y1) – (y2-y1)(x0-x1)  =  0   线段上 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的左侧菜单击切换右侧内容的示例代码: HTML 代码: ``` <div class="container"> <nav> <ul> <li><a href="#section1">Section 1</a></li> <li><a href="#section2">Section 2</a></li> <li><a href="#section3">Section 3</a></li> </ul> </nav> <main> <section id="section1"> <h2>Section 1</h2> <p>Content for section 1 goes here.</p> </section> <section id="section2"> <h2>Section 2</h2> <p>Content for section 2 goes here.</p> </section> <section id="section3"> <h2>Section 3</h2> <p>Content for section 3 goes here.</p> </section> </main> </div> ``` CSS 代码: ``` .container { display: flex; flex-direction: row; height: 100%; } nav { background-color: #f2f2f2; width: 20%; } nav ul { list-style: none; padding: 0; } nav li { margin: 0; } nav a { display: block; padding: 0.5rem; text-decoration: none; color: #333; } nav a:hover { background-color: #333; color: #fff; } main { flex: 1; padding: 1rem; } section { padding: 1rem; background-color: #fff; border: 1px solid #ccc; margin-bottom: 1rem; } section h2 { margin-top: 0; } ``` JavaScript 代码: ``` const sections = document.querySelectorAll("section"); document.querySelectorAll("nav a").forEach((item) => { item.addEventListener("click", (event) => { event.preventDefault(); const id = item.getAttribute("href").slice(1); sections.forEach((section) => { section.style.display = section.getAttribute("id") === id ? "block" : "none"; }); document.querySelectorAll("nav a").forEach((link) => { link.classList.remove("active"); }); item.classList.add("active"); }); }); ``` 代码解释: 这段代码中,我们首先使用了 flex 布局来创建一个左右两个部分的容器。左侧部分是一个导航菜单,右侧部分是一个内容区域。导航菜单使用了 HTML 的 ul 和 li 标签来创建,然后使用 CSS 设置了样式。右侧内容区域则使用了 HTML 的 section 标签来创建,每个 section 标签分别对应了导航菜单中的一个菜单项。 JavaScript 代码中,我们首先使用了 document.querySelectorAll() 方法来获取所有的 section 标签,然后使用 forEach() 方法和 addEventListener() 方法来为导航菜单中的每个菜单项添加击事件。当用户击某个菜单项时,我们首先使用 event.preventDefault() 方法来防止默认的页面跳转行为。然后,我们获取被击菜单项的 id 属性,然后遍历所有的 section 标签,根据 id 属性来判断哪个 section 要显示,哪个 section 要隐藏。最后,我们还添加了一个 active 类来突出显示当前被击的菜单项。 以上就是一个简单的左侧菜单击切换右侧内容的示例代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值