记录D3-23.5.18

继续刷题

LC454 四数相加2

将四个整数数组两两分开,遍历前两个数组并记录两数之和出现的次数。然后遍历后两个数组的两数之和,看他们的互补数是否出现过。如果出现了,ans+=出现过的次数。
这里要求的是可以出现重复的情况,所以难度也没这么高。

class Solution {
public:
    int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
        unordered_map<int,int> umap;
        for(auto a:nums1){
            for(auto b:nums2){
                umap[a+b]++;
            }
        }
        int ans=0;
        for(auto c:nums3){
            for(auto d:nums4){
                if(umap.count(0-(c+d))){
                    ans+=umap[0-(c+d)];
                }
            }
        }
        return ans;
    }
};

LC383 赎金信

之前好像做过。思路比较简单,用哈希表来记录magazine里面的字符以及数量,ransomNote中出现不同字符或者数量不够就false。

class Solution {
public:
    bool canConstruct(string ransomNote, string magazine) {
        unordered_map<char,int> umap;
        for(auto c:magazine){
            umap[c]++;
        }
        for(auto c:ransomNote){
            if(umap.count(c) && umap[c]>0){
                umap[c]--;
            }
            else{
                return false;
            }
        }
        return true;
    }
};

LC15 三数之和

在 Cesium 中使用 `d3-delaunay.js` 生成三角形,是一种结合 2D 空间三角剖分算法3D 地理空间可视化的技术。`d3-delaunay.js` 是 D3.js 的一个子模块,用于对二维点集进行 Delaunay 三角剖分。由于 Cesium 是一个三维地理空间可视化库,我们需要将地理坐标(经纬度)转换为二维平面坐标进行三角剖分,然后再映射回三维空间进行绘制。 --- ### ✅ 示例:使用 `d3-delaunay.js` 在 Cesium 中生成三角形 #### 1. 引入必要的库 ```html <!-- 引入 Cesium --> <link href="https://cesium.com/downloads/cesiumjs/releases/1.107/Build/Cesium/Widgets/widgets.css" rel="stylesheet"> <script src="https://cesium.com/downloads/cesiumjs/releases/1.107/Build/Cesium/Cesium.js"></script> <!-- 引入 d3-delaunay --> <script src="https://unpkg.com/d3-delaunay@6"></script> ``` #### 2. 初始化 Cesium Viewer ```html <div id="cesiumContainer"></div> <script> Cesium.Ion.defaultAccessToken = &#39;YOUR_ION_TOKEN&#39;; // 替换为你的 Ion token const viewer = new Cesium.Viewer(&#39;cesiumContainer&#39;); // 示例点集:经纬度坐标 const points = [ { lon: -115.0, lat: 37.0 }, { lon: -115.0, lat: 32.0 }, { lon: -107.0, lat: 37.0 }, { lon: -102.0, lat: 31.0 }, { lon: -102.0, lat: 35.0 } ]; </script> ``` #### 3. 使用 `d3-delaunay.js` 进行三角剖分并绘制三角形 ```javascript // 将经纬度转换为屏幕坐标(2D平面) const delaunayPoints = points.map(p => { const cart3 = Cesium.Cartesian3.fromDegrees(p.lon, p.lat); const position = viewer.scene.cartesianToCanvasCoordinates(cart3); return [position.x, position.y]; }); // 使用 d3-delaunay 构建三角剖分 const delaunay = d3.Delaunay.from(delaunayPoints); const triangles = delaunay.render().split(/\s+/).slice(1).map(Number); // 构建三角形几何体 const trianglePositions = []; for (let i = 0; i < triangles.length; i += 3) { const p1 = delaunayPoints[triangles[i]]; const p2 = delaunayPoints[triangles[i + 1]]; const p3 = delaunayPoints[triangles[i + 2]]; // 将屏幕坐标转换回经纬度 const cart1 = viewer.scene.canvasToCartesianCoordinates(new Cesium.Cartesian2(p1[0], p1[1])); const cart2 = viewer.scene.canvasToCartesianCoordinates(new Cesium.Cartesian2(p2[0], p2[1])); const cart3 = viewer.scene.canvasToCartesianCoordinates(new Cesium.Cartesian2(p3[0], p3[1])); if (cart1 && cart2 && cart3) { const carto1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cart1); const carto2 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cart2); const carto3 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cart3); trianglePositions.push( Cesium.Cartesian3.fromRadians(carto1.longitude, carto1.latitude), Cesium.Cartesian3.fromRadians(carto2.longitude, carto2.latitude), Cesium.Cartesian3.fromRadians(carto3.longitude, carto3.latitude) ); } } // 绘制三角形 viewer.entities.add({ polygon: { hierarchy: new Cesium.PolygonHierarchy( trianglePositions ), material: Cesium.Color.RED.withAlpha(0.5) } }); </script> ``` --- ### 📌 解释说明 - **d3.Delaunay.from(points)**:使用 `d3-delaunay` 对一组二维点进行 Delaunay 三角剖分,返回三角形的顶点索引。 - **render().split(/\s+/).slice(1).map(Number)**:将三角剖分结果转换为顶点索引数组。 - **Cesium.Cartesian3.fromDegrees(lon, lat)**:将经纬度转换为 Cesium 的笛卡尔坐标。 - **viewer.scene.cartesianToCanvasCoordinates(cart3)**:将 3D 坐标转换为 2D 屏幕坐标,用于 `d3-delaunay`。 - **viewer.scene.canvasToCartesianCoordinates(canvasPos)**:将屏幕坐标转回 3D 坐标,用于渲染。 - **PolygonHierarchy**:用于构造 Cesium 中的多边形(三角形)。 - **material**:设置三角形的填充颜色和透明度。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值