Skip to content
design
Components

Sailing catamaran

The vessel profile's outline for a sailing catamaran, and the vessels it draws.

On this page
WLLWL 13.39 mLOA 13.41 mDraft 1.39 mFreeboard 1.57 m
The sailing catamaran outline as traced, dimensioned in meters read from its marked points.
Code
import { SAILING_CATAMARAN, VesselProfile, type VesselOutline } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";

export const description: string =
  "The sailing catamaran outline as traced at 13.41 m, dimensioned in meters read from the points marked on it.";

const outline: VesselOutline = SAILING_CATAMARAN;

/** Drawing units to the meter: the length overall, from the transom to the bow's tip, is the reference length. */
const perMeter: number = (outline.hooks.bowTip - outline.hooks.transom) / outline.referenceLength;

/** A distance on the drawing, in meters. */
function meters(units: number): string {
  return `${(units / perMeter).toFixed(2)} m`;
}

export default function Drawn(): ReactElement {
  const { hooks }: VesselOutline = outline;
  return (
    <VesselProfile
      outline={outline}
      dimensions={{
        lengthOverall: meters(hooks.bowTip - hooks.transom),
        waterlineLength: meters(hooks.waterlineForward - hooks.waterlineAft),
        draft: meters(hooks.keelFoot - hooks.waterline),
        freeboard: meters(hooks.waterline - hooks.deckAtBow),
      }}
    />
  );
}

The sailing catamaran outline is traced from YACHT magazine's side elevation of the Fountaine Pajot Elba 45, a cruising catamaran of 13.41 m: one hull seen from the side with its two hull windows, the saloon on the bridgedeck with its glazing, the flybridge's hardtop reaching aft over the open cockpit on its post, the swim steps at the stern, and below the water the canoe body, the low keel, the rudder and the drive. The rig, the rails, the davits, the flybridge's cushions and the flag are left out. A shorter waterline comes off both ends equally.

The outline is traced at 13.41 m and listed in VESSEL_OUTLINES as sailing-catamaran; the kit exports it as SAILING_CATAMARAN. Every catamaran in the vessel catalog, 41 models, takes this outline; the power catamarans take it too, without a rig to leave out. Given a vessel's proportions, the vessel profile stretches it to her length overall, waterline length, freeboard and draft; a particular not given follows the length overall in the outline's proportion.

Examples

Vessels from this outline

WLLWL 11.73 mLOA 11.74 mDraft 1.35 m
Lagoon 40
WLLWL 13.42 mLOA 13.90 mDraft 1.65 m
Leopard 46
WLLWL 16.20 mLOA 16.80 mDraft 1.48 m
Bali 5.4
The Lagoon 40, Leopard 46 and Bali 5.4, each drawn from the sailing catamaran outline at her own particulars and to one scale.
Code
import { SAILING_CATAMARAN, VesselProfile } from "@bosunkit/components/vessel-profile";
import type { ReactElement } from "react";

export const description: string =
  "The Lagoon 40, Leopard 46 and Bali 5.4, each drawn from the sailing catamaran outline at her own particulars and" +
  " to one scale.";

interface Vessel {
  /** The vessel, as the catalog names her. */
  readonly name: string;
  /** Length overall, meters. */
  readonly loa: number;
  /** Length at the waterline, meters, where the catalog has it. */
  readonly lwl?: number;
  /** Draft, meters. */
  readonly draft: number;
  /** Freeboard at the bow, meters, where the catalog has it. */
  readonly freeboard?: number;
}

/** Particulars from the vessel catalog. */
const VESSELS: readonly Vessel[] = [
  { name: "Lagoon 40", loa: 11.74, lwl: 11.73, draft: 1.35 },
  { name: "Leopard 46", loa: 13.9, lwl: 13.42, draft: 1.65 },
  { name: "Bali 5.4", loa: 16.8, lwl: 16.2, draft: 1.48 },
];

export default function Vessels(): ReactElement {
  return (
    <div style={{ display: "grid", gap: "var(--space-md)" }}>
      {VESSELS.map(
        ({ name, loa, lwl, draft, freeboard }: Vessel): ReactElement => (
          <figure key={name} style={{ margin: 0 }}>
            <VesselProfile
              outline={SAILING_CATAMARAN}
              proportions={{ lengthOverall: loa, waterlineLength: lwl, draft, freeboard }}
              frameLength={16.8}
              dimensions={{
                lengthOverall: `${loa.toFixed(2)} m`,
                waterlineLength: lwl === undefined ? undefined : `${lwl.toFixed(2)} m`,
                draft: `${draft.toFixed(2)} m`,
              }}
            />
            <figcaption style={{ marginTop: "var(--space-xs)", color: "var(--text-dim)", fontSize: "0.85em" }}>
              {name}
            </figcaption>
          </figure>
        ),
      )}
    </div>
  );
}
  • Vessel profile: the component, its props, and the outline for each hull shape.